首页 > 解决方案 > 隐藏到json pandas python时删除obejct列中的\

问题描述

我有数据框用户

id | user  | phone
------------------
1  | chris | {"device": "a", "brand": "a"}
2  |  nat  | {"device": "a", "brand": "a"}
3  | zack  | {"device": "a", "brand": "a"}

然后将其传递给对象变量

rows = df.loc[df['id'] == 1]
merged = {'data': rows.reindex(columns=df.columns.values).to_dict('records')}
with open((path + '/' + filename + '.json'), 'w') as fp:
        json.dump(merged, fp)

然后得到 filename.json :

{
  "data": {
    "id" : 1,
    "user" : "chris",
    "phone": "{\"device\": \"a\", \"brand\": \"a\"}"
   }
}

预期结果:

{
  "data": {
    "id" : 1,
    "user" : "chris",
    "phone": {
        "device": "a", 
        "brand": "a"
     }
   }
}

如何使它达到预期的结果?

标签: pythonjsonexcelpython-3.xpandas

解决方案


的内容phone已经是 JSON。正如您所遇到的,将 JSON 转换为 JSON 将导致引号转义。

解决方案是在转换为 JSON 之前将JSON 字符串转换phonedict第一个 using ) 。json.loadsmerged

import json

merged = {
  "data": {
    "id" : 1,
    "user" : "chris",
    "phone": "{\"device\": \"a\", \"brand\": \"a\"}"
   }
}

merged['data']['phone'] = json.loads(merged['data']['phone'])

print(json.dumps(merged, indent=4))

输出:

{
    "data": {
        "id": 1,
        "user": "chris",
        "phone": {
            "device": "a",
            "brand": "a"
        }
    }
}

当然,这假定phoneJSON 始终是有效的,否则json.loads会失败。


推荐阅读