2017-10-12 81 views
1

我尝试使用mongoengine将一个JSON请求保存到MongoDB中的DynamicDocument时出现问题。无法在DynamicEmbeddedDocument中保存复杂的JSON结构(Mongoengine,Flask)

这里是我的文档:

class documentSource(DynamicEmbeddedDocument): 
    name = StringField() 

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

这是我的信息发布对象:

{ 
     "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() 

但问题是:

如果我发送此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" 
      } 
      } 
     } 
     ] 
    } 

但与此对象的工作原理:

{ 
     "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中。

非常感谢您的帮助。

回答

0

“我的第一个来源”和“我的第二个来源”后面缺少逗号。你的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无效。接受它并发布一个不同的问题... –