我有Method to save networkx graph to json graph?的后续问题,但Stack Overflow不允许我在Sirus的答案中添加评论,我想澄清一下,所以这里是我的问题。
将JSON数据写入文本文件的最佳方法是什么?
我试图做一个显而易见的步骤,写一个由NetworkX生成的json_graph文件,这样我就可以将它读入D3.js.我可以毫无问题地将它打印到控制台,因此我可以验证它是否可以创建适当的JSON数据。但是我将它保存到文件的尝试失败了(和通常的Python一样)文档基本上没用。这就是我的尝试:
with open('networkdata1.json', 'w') as outfile1:
outfile1.write(json_graph.node_link_data(G))
它给了我错误:" TypeError:期望一个字符缓冲区对象"如果我使用简单的字符串而不是json图运行相同的代码,那么它可以完美地工作。问题在于将json对象转换为文本,并且我不知道如何做到这一点,并且我找不到包含此步骤的任何示例。一旦你知道它,我就确定它很简单,但是如果你不了解Python,那么很难从在线资料中找出这些东西。
将JSON数据写入文本文件的最佳方法是什么?如果这是正确的方法,还有什么可能导致这个问题?
答案 0 :(得分:3)
Jamie走在正确的轨道上,并且在NetworkX页面上也有部分答案,将它们组合在一起创建了一个可行的解决方案:
with open('networkdata1.json', 'w') as outfile1:
outfile1.write(json.dumps(json_graph.node_link_data(G)))
事实证明,有必要将图形转换为json_graph,然后将json转储到文本,然后将该文本写入文本文件。显然他们应该在文档中更明显地包含这一步骤,但希望下一个开始这条道路的人能够快速,轻松地找到这个简单的解决方案。
请确保您有import json
和import networkx as nx
才能使用此功能(尽管后者似乎并未真正出现在此代码段中)。
答案 1 :(得分:0)
您可能需要先将json转储到文本中。在大多数json
库中,这是使用方法.dumps(object)
完成的。
with open('networkdata1.json', 'w') as outfile1:
outfile1.write(json_graph.dumps(G))
相反,阅读json
通常是.loads(text_data)
。