2017-10-12 9 views
1

mongoengineを使用してMongoDBのDynamicDocumentにJSONリクエストを保存しようとして問題があります。ここでDynamicEmbeddedDocument(Mongoengine、Flask)に複雑なJSON構造を保存できません

は私のドキュメントです:

class documentSource(DynamicEmbeddedDocument): 
    name = StringField() 

class documentParent(Document): 
    name = StringField(max_length=120) 
    source = ListField(EmbeddedDocumentField('documentSource')) 

これは私のリクエストPOSTオブジェクトです:

{ 
     "name": "Test", 
     "source": [{ 
      "name": "my first source" 
      "metadata": { 
      "name": "testing", 
      "products": [ 
       {"name":"my product", "price":123} 
      ] 
      } 
     },{ 
      "name": "my second source" 
      "metadata": { 
      "name": "Test", 
      "profile": "foo" 
      } 
     } 
     ] 
    } 

は、ここに私のフラスコPOSTメソッドです:

def post(self): 
     myObj = documentParent(
      name=self.data['name'], 
      description=self.data['description'], 
     ) 

     sourceList = [] 
     for i in self.data['source']: 
      content = documentSource(**i) 
      sourceList.append(content) 
     myObj.source = sourceList 
     myObj.save() 

しかし、問題は次のとおりです。

{ 
     "name": "Test", 
     "source": [{ 
      "name": "my first source" 
      "metadata": { 
      "name": "testing", 
      "products": [ 
       {"name":"my product", "price":123} 
      ] 
      } 
     },{ 
      "name": "my second source" 
      "metadata": { 
      "name": "Test", 
      "profile": "foo", 
      "foo" : { 
       "foo1": "var1" 
      } 
      } 
     } 
     ] 
    } 

をしかし、このオブジェクトで動作します::このJSONは動作しませんsendが

{ 
     "name": "Test", 
     "source": [{ 
      "name": "my first source" 
      "metadata": { 
      "name": "testing", 
      "products": [ 
       "my product" 
      ] 
      } 
     },{ 
      "name": "my second source" 
      "metadata": { 
      "name": "Test", 
      "profile": "foo" 
      } 
     } 
     ] 
    } 

同じ問題をリストのリストに:

"image": 
    {"available_sizes": 
    [[[150, 
     19], 
     "assets/images/150x150.png"], 
    [[250, 
     31], 
     "assets/images/250x250.png"], 
    [[450, 
     57], 
     "assets/images/450x450.png"]] 

私は、複雑なJSON」構造に考えますmongoengineのパーサは動作しません。ソース情報を制御することができないため、この問題を解明する方法はわかりません。大きな図は、ソースからJSONオブジェクトを取得して、それを自分のDynamicDocumentに保存することです(Webクローラーなど)。

ご協力いただきありがとうございます。

答えて

0

"私の最初のソース"と "私の2番目のソース"の後にカンマがありません。あなたのJSONは無効です。

有効:

{ 
"name": "Test", 
"source": [{ 
    "name": "my first source", 
    "metadata": { 
     "name": "testing", 
     "products": [{ 
      "name": "my product", 
      "price": 123 
     }] 
    } 
}, { 
    "name": "my second source", 
    "metadata": { 
     "name": "Test", 
     "profile": "foo", 
     "foo": { 
      "foo1": "var1" 
     } 
    } 
}] 

}

あなたのJSONを検証するためニフティツール:

https://jsonlint.com/

+0

申し訳ありませんいいえ、この質問にコピー&ペーストするとエラーだった実際に私が使用して郵便配達員はリクエストを行い、郵便配達員はバリデーターを持っています。 –

+0

答えは正しいです。 JSONが無効です。それを受け入れ、別の質問を投稿する... –

関連する問題