2

我使用 Falcon 框架和 neomodel 来与 neo4j 数据库进行通信。

我在数据库中有一些节点,我尝试通过 API(获取方法)将有关它们的信息作为 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 对象?

4

3 回答 3

2

使用json.dumps(p.__properties__)就可以了。Usingp.__dict__尝试对 neomodel 属性类进行编码,这将引发错误。

于 2018-05-01T05:05:16.103 回答
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])
于 2019-10-27T14:32:28.743 回答
1

似乎p你的每一个people都是一个对象。尝试类似的东西json.dumps(p.__dict__)。如果它是一个常见的新模型节点对象,那么这应该可以工作。

于 2017-11-03T17:29:17.197 回答