将数据帧转换为 json 文件时的反斜杠
Backward slash when converting dataframe to json file
我试图将 pandas 数据帧转换为 json。但是数据框中的一列具有类似路径的结构(示例:/disk/folder/folder/file.txt)。
在每个 /
正斜杠之前,出现反斜杠 \
。
如何避免反斜杠。
我的数据框:
path time content
0 /disk/folder/folder/file.txt 3.0 नमस्ते
1 /disk/folder/folder/file1.txt 4.0 नमस्ते
我的代码将 pandas 数据帧转换为 json
with open('temp.json', 'w', encoding='utf-8') as file:
df.to_json(file, orient = 'records' ,force_ascii=False, lines=True)
输出Json文件
{"path":"\/disk\/folder\/folder\/file.txt","time":3.0,"content":"नमस्ते"}
{"path":"\/disk\/folder\/folder\/file1.txt","time":4.0,"content":"नमस्ते"}
预期输出
{"path":"/disk/folder/folder/file.txt","time":3.0,"content":"नमस्ते"}
{"path":"/disk/folder/folder/file1.txt","time":4.0,"content":"नमस्त"}
帮我解决这个问题。
没关系。反斜杠用于 escape 字符串。正斜杠在 JSON 或 pandas 中可能有一些特殊含义,因此使用反斜杠对其进行转义。如果你 load/use 那个 JSON 回来应该没问题。
编辑 1
有趣的是,如果没有 Pandas,这似乎不会发生。
from json import dumps
print(dumps({"path": "/disk/folder/folder/file.txt", "time": 3.0, "content": "नमस्ते"}, ensure_ascii=False))
输出:
{"path": "/disk/folder/folder/file.txt", "time": 3.0, "content": "\u0928\u092e\u0938\u094d\u0924\u0947"}
编辑 2
看来有人比我先回答了:
编辑 3 - OP 的完整解决方案,以便于理解
数据帧
path time content
0 /disk/folder/folder/file.txt 3.0 नमस्ते
1 /disk/folder/folder/file1.txt 4.0 नमस्ते
数据框到记录字典
dict_records = dataframe.to_dict('records')
dict_records
[{'path': '/disk/folder/folder/file.txt', 'time': 3.0, 'content': 'नमस्ते'},
{'path': '/disk/folder/folder/file1.txt', 'time': 4.0, 'content': 'नमस्ते'}]
字典到 json 通过使用 ndjson 库转储
import ndjson
with open('sample.json', 'w') as f:
ndjson.dump(dict_records, f,ensure_ascii=False)
sample.json
{"path": "/disk/folder/folder/file.txt", "time": 3.0, "content": "नमस्ते"}
{"path": "/disk/folder/folder/file1.txt", "time": 4.0, "content": "नमस्ते"}
如果你想安装 ndjson - 参考 ndjson Package
我试图将 pandas 数据帧转换为 json。但是数据框中的一列具有类似路径的结构(示例:/disk/folder/folder/file.txt)。
在每个 /
正斜杠之前,出现反斜杠 \
。
如何避免反斜杠。
我的数据框:
path time content
0 /disk/folder/folder/file.txt 3.0 नमस्ते
1 /disk/folder/folder/file1.txt 4.0 नमस्ते
我的代码将 pandas 数据帧转换为 json
with open('temp.json', 'w', encoding='utf-8') as file:
df.to_json(file, orient = 'records' ,force_ascii=False, lines=True)
输出Json文件
{"path":"\/disk\/folder\/folder\/file.txt","time":3.0,"content":"नमस्ते"}
{"path":"\/disk\/folder\/folder\/file1.txt","time":4.0,"content":"नमस्ते"}
预期输出
{"path":"/disk/folder/folder/file.txt","time":3.0,"content":"नमस्ते"}
{"path":"/disk/folder/folder/file1.txt","time":4.0,"content":"नमस्त"}
帮我解决这个问题。
没关系。反斜杠用于 escape 字符串。正斜杠在 JSON 或 pandas 中可能有一些特殊含义,因此使用反斜杠对其进行转义。如果你 load/use 那个 JSON 回来应该没问题。
编辑 1
有趣的是,如果没有 Pandas,这似乎不会发生。
from json import dumps
print(dumps({"path": "/disk/folder/folder/file.txt", "time": 3.0, "content": "नमस्ते"}, ensure_ascii=False))
输出:
{"path": "/disk/folder/folder/file.txt", "time": 3.0, "content": "\u0928\u092e\u0938\u094d\u0924\u0947"}
编辑 2
看来有人比我先回答了:
编辑 3 - OP 的完整解决方案,以便于理解
数据帧
path time content
0 /disk/folder/folder/file.txt 3.0 नमस्ते
1 /disk/folder/folder/file1.txt 4.0 नमस्ते
数据框到记录字典
dict_records = dataframe.to_dict('records')
dict_records
[{'path': '/disk/folder/folder/file.txt', 'time': 3.0, 'content': 'नमस्ते'},
{'path': '/disk/folder/folder/file1.txt', 'time': 4.0, 'content': 'नमस्ते'}]
字典到 json 通过使用 ndjson 库转储
import ndjson
with open('sample.json', 'w') as f:
ndjson.dump(dict_records, f,ensure_ascii=False)
sample.json
{"path": "/disk/folder/folder/file.txt", "time": 3.0, "content": "नमस्ते"}
{"path": "/disk/folder/folder/file1.txt", "time": 4.0, "content": "नमस्ते"}
如果你想安装 ndjson - 参考 ndjson Package