Python 在组合两个panda时避免双重编码JSON';发送json调用

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

我有两个数据帧(节点和链接),它们由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 Halpert"}]
然后,我将这些JSON dict组合成一个对象(用于d3力定向图):

现在我有两个问题:

  • JSON对象
    j
    采用双引号编码,并在方括号内加上单引号
  • {'nodes':
    “[{”id:“Michael Scott”},{”id:“Jim Halpert”}],
    “链接”:
    “[{”来源“:”迈克尔·斯科特“,”目标“:”吉姆·哈尔伯特“,”价值“:1}”
    }

  • 似乎没有很好的方法将其写入文件。我不能使用
    到\u json
    的内置路径,因为我必须分离已经JSONified的数据帧。我尝试了以下方法:

    jsonOut=open('test.json','w')
    jsonOut.write(json.dumps(j))

  • 这也会在最终文件中产生双引号编码格式,只需使用额外的双引号而不是单引号

    问题:在组合两个已JSONified的数据帧时,如何避免对生成的JSON文件进行双重编码?如何写出生成的文件

    感谢您的帮助!

    Pandas方法将转换为JSON字符串,该字符串是添加到外部字典
    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()
    的方法似乎很好;您有什么问题吗?您是对的-我与正在使用的数据库失去了连接,并且做出了一个糟糕的假设。再次感谢您的帮助!