Python 在组合两个panda时避免双重编码JSON';发送json调用
我有两个数据帧(节点和链接),它们由Pandas的to_json调用JSONified:Python 在组合两个panda时避免双重编码JSON';发送json调用,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我有两个数据帧(节点和链接),它们由Pandas的to_json调用JSONified: links = links.to_json(orient='records') nodes = nodes.to_json(orient='records') 这些调用的输出似乎与预期的一样: 链接: [{"source":"Michael Scott", "target":"Jim Halpert", "value":1}] 节点: [{"id":"Michael Scott"}, {"id":Jim
links = links.to_json(orient='records')
nodes = nodes.to_json(orient='records')
这些调用的输出似乎与预期的一样:
链接:
[{"source":"Michael Scott", "target":"Jim Halpert", "value":1}]
节点:
[{"id":"Michael Scott"}, {"id":Jim Halpert"}]
然后,我将这些JSON dict组合成一个对象(用于d3力定向图):
现在我有两个问题:
j
采用双引号编码,并在方括号内加上单引号{'nodes':
“[{”id:“Michael Scott”},{”id:“Jim Halpert”}],
“链接”:
“[{”来源“:”迈克尔·斯科特“,”目标“:”吉姆·哈尔伯特“,”价值“:1}”
}
到\u json
的内置路径,因为我必须分离已经JSONified的数据帧。我尝试了以下方法:
jsonOut=open('test.json','w')
jsonOut.write(json.dumps(j))
j
中的值
因此,此代码将DatFrame
序列化为字符串
:
links = links.to_json(orient='records')
如果您检查链接的类型
,它将是一个str
:
type(links)
<type 'str'>
类型(链接)
尝试改用。Pandas方法将转换为JSON字符串,该字符串是添加到外部字典j
中的值
因此,此代码将DatFrame
序列化为字符串
:
links = links.to_json(orient='records')
如果您检查链接的类型
,它将是一个str
:
type(links)
<type 'str'>
类型(链接)
尝试改用。也许您可以向我们展示更多的代码。 我试图重现你的问题,但我没有遇到与你相同的问题。 我的代码: 我的输出:
{'nodes': [{'id': 'Michael Scott'}, {'id': 'Jim Halpert'}], 'links': [{'source': 'Michael Scott', 'target': 'Jim Halpert', 'value': 1}]}
我还生成了一个json文件:
在pd.to_json()之前,您可能会遇到如何实例化链接和节点的问题
Julien也许您可以向我们展示更多的代码。 我试图重现你的问题,但我没有遇到与你相同的问题。 我的代码: 我的输出:
{'nodes': [{'id': 'Michael Scott'}, {'id': 'Jim Halpert'}], 'links': [{'source': 'Michael Scott', 'target': 'Jim Halpert', 'value': 1}]}
我还生成了一个json文件:
在pd.to_json()之前,您可能会遇到如何实例化链接和节点的问题
Julien对
str
的初始编码发生在创建j
之前,实际上是在创建链接
和节点
的过程中。从a(手卷)开始,您不会在此处重现该问题输入字典的正确定义。对,这就是为什么我不认为包含更多代码会有帮助,因为我的起点是看起来像你的Dict,Julien。但是它们是由to_json
创建的,而不是手工制作的。正如富士苹果所说,to_json不创建Dict,而是创建字符串。你应该使用to_Dict导出,或json.loads将字符串转换为dict:j={“nodes”:json.loads(nodes),“links”:json.loads(links)}对str
的初始编码发生在创建j
之前,实际上是在创建links
和nodes
的过程中。从一开始(手动滚动)就不会在这里重现问题输入字典的正确定义。对,这就是为什么我不认为包含更多代码会有帮助,因为我的起点是看起来像你的Dict,Julien。但是它们是由to_json
创建的,而不是手工制作的。正如富士苹果所说,to_json不创建Dict,而是创建字符串。你应该使用to_Dict导出,或json.loads将字符串转换为dict:j={“节点”:json.loads(节点),“链接”:json.loads(链接)}这就解决了双重编码的问题!非常感谢-很抱歉这是一个如此简单的答案。你对我问题的第二部分有什么想法吗?关于如何写出它?你当前使用json.dumps()的方法
似乎很好;您对此有什么问题?您是对的-我与正在拔出的DB失去了连接,并且做出了一个糟糕的假设。再次感谢您的帮助!这解决了双重编码的问题!非常感谢-很抱歉,这是一个如此简单的答案。您对我问题的第二部分有什么想法吗g到如何写出来?您当前使用json.dumps()
的方法似乎很好;您有什么问题吗?您是对的-我与正在使用的数据库失去了连接,并且做出了一个糟糕的假设。再次感谢您的帮助!