我使用Falcon框架和neomodel与neo4j数据库进行通信。
我在DB中有一些节点,我尝试通过API(get methon)作为JSON对象返回有关它们的信息。
为了检索信息,我使用代码people = Person.nodes
我向人们重复:
for p in people:
print(p)
我得到了:
{'name': 'John', 'id': 0, 'uid': '584d9b0517584b8194f222052bf177ff'}
{'name': 'Paul', 'id': 1, 'uid': 'f5763c01704e449885f846e87e1fcb6d'}
当我在单个实体上json.dumps()
时,我收到错误:
TypeError: <Person: {'name': 'John', 'id': 0, 'uid': '584d9b0517584b8194f222052bf177ff'}> is not JSON serializable
如何将neomodel对象转换为json对象?
答案 0 :(得分:1)
似乎p
中的每个people
都是一个对象。
尝试类似json.dumps(p.__dict__)
的内容。如果它是一个常见的neomodel节点对象,那么这应该可行。
答案 1 :(得分:1)
使用json.dumps(p.__properties__)
可以解决问题。使用p.__dict__
尝试编码neomodel属性类,这将引发错误。
答案 2 :(得分:1)
一个老问题了,但这就是我的工作方式。
在类上创建一个函数,这样我就可以控制要返回的数据。使用__properies__
代替.to_json
功能,您将获得所有属性。
class Player(StructuredNode):
mid = IntegerProperty(unique_index=True)
f_name = StringProperty()
l_name = StringProperty()
email = StringProperty()
team = RelationshipFrom('Team', 'PLAYER', model=PlayerRel)
def to_json(self):
return {
"id": self.mid,
"firstName": self.f_name,
"lastName": self.l_name,
"email": self.email,
"fullName": self.f_name + ' ' + self.l_name
}
然后我有一个节点,其中连接了多个播放器,我只是这样做以返回可以序列化的播放器数组:
...
team = Team.nodes.get(team_id=id)
return ([player.to_json() for player in team.players])