如何将neomodel对象转换为json? (不是JSON可序列化的)

时间:2017-09-07 11:45:01

标签: python json falcon neomodel

我使用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对象?

3 个答案:

答案 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])