将数据帧转换为 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