使用 Python 删除 json 文件中的新换行符。

Posted

技术标签:

【中文标题】使用 Python 删除 json 文件中的新换行符。【英文标题】:Removing a new line feed in json file using Python. 【发布时间】:2017-12-01 08:43:16 【问题描述】:

我正在从 firebase 下载数据,并将其导出为 json。在此之后,我尝试将其上传到 bigquery,但我需要删除新的换行符以便大查询接受它。

   "ConnectionTime": 730669.644775033, 
    "objectId": "eHFvTUNqTR", 
    "CustomName": "Relay Controller", 
    "FirmwareRevision": "FW V1.96", 
    "DeviceID": "F1E4746E-DCEC-495B-AC75-1DFD66527561", 
    "PeripheralType": 9, 
    "updatedAt": "2016-12-13T15:50:41.626Z", 
    "Model": "DF Bluno", 
    "HardwareRevision": "HW V1.7", 
    "Serial": "0123456789", 
    "createdAt": "2016-12-13T15:50:41.626Z", 
    "Manufacturer": "DFRobot"

    "ConnectionTime": 702937.7616419792, 
    "objectId": "uYuT3zgyez", 
    "CustomName": "Relay Controller", 
    "FirmwareRevision": "FW V1.96", 
    "DeviceID": "F1E4746E-DCEC-495B-AC75-1DFD66527561", 
    "PeripheralType": 9, 
    "updatedAt": "2016-12-13T08:08:29.829Z", 
    "Model": "DF Bluno", 
    "HardwareRevision": "HW V1.7", 
    "Serial": "0123456789", 
    "createdAt": "2016-12-13T08:08:29.829Z", 
    "Manufacturer": "DFRobot"

这就是我需要的方式,但除了手动执行之外,我不知道如何执行此操作。

"ConnectionTime": 730669.644775033,"objectId": "eHFvTUNqTR","CustomName": "Relay Controller","FirmwareRevision": "FW V1.96","DeviceID": "F1E4746E-DCEC-495B-AC75-1DFD66527561","PeripheralType": 9,"updatedAt": "2016-12-13T15:50:41.626Z","Model": "DF Bluno","HardwareRevision": "HW V1.7","Serial": "0123456789","createdAt": "2016-12-13T15:50:41.626Z","Manufacturer": "DFRobot"
"ConnectionTime": 702937.7616419792, "objectId": "uYuT3zgyez", "CustomName": "Relay Controller", "FirmwareRevision": "FW V1.96", "DeviceID": "F1E4746E-DCEC-495B-AC75-1DFD66527561", "PeripheralType": 9, "updatedAt": "2016-12-13T08:08:29.829Z", "Model": "DF Bluno", "HardwareRevision": "HW V1.7", "Serial": "0123456789", "createdAt": "2016-12-13T08:08:29.829Z", "Manufacturer": "DFRobot"

我正在使用 python 加载 json,读取它然后编写一个新的,但无法找出正确的代码。谢谢!

这是我的python代码的大纲

import json
with open('nospacetest.json', 'r') as f:
  data_json=json.load(f)

#b= the file after code for no line breaks is added

with open('testnoline.json', 'w') as outfile:
  json.dump=(b, outfile)

【问题讨论】:

【参考方案1】:

你只需要确保indent=None当你dump你的数据到json:

with open('testnoline.json', 'w') as outfile:   
    json.dump(data_json, outfile, indent=None)

引用文档:

如果indent 是一个非负整数,那么 JSON 数组元素和对象成员将使用该缩进级别进行漂亮打印。缩进级别 0 或负数只会插入换行符。 None(默认)选择最紧凑的表示。

【讨论】:

非常感谢,但这部分工作。现在它不会将数据集彼此分开。有什么建议吗? 仅供参考,indent=None 是默认值。 @smarx 当然。它在答案中引用的文档中明确表示。 对,我只是不确定你为什么在代码中包含indent=None @W.Stephens 不清楚文件的格式是什么。它是否以[ 开头并以] 结尾?字典之间有逗号吗? (您分享的内容没有。)【参考方案2】:

从字里行间看,我认为输入格式可能是单个 JSON 数组,而所需的输出是该数组元素的换行符分隔的 JSON 表示。如果是这样,这可能就是所有需要的:

with open('testnoline.json', 'w') as outfile:
    for obj in data_json:
        outfile.write(json.dumps(obj) + "\n")

【讨论】:

所以知道这个运行但是当我去打开文件时它无法打开它说有一个未知的错误。有什么建议吗? 你是如何打开文件的? 请注意,尽管扩展名为 .json,但它不是是一个有效的 JSON 文件。它是一个文本文件,其中包含一堆 JSON 对象,它们之间有换行符。因此,如果您尝试在某种 JSON 查看器中打开它,预计会失败。

以上是关于使用 Python 删除 json 文件中的新换行符。的主要内容,如果未能解决你的问题,请参考以下文章

python去除字符串中的换行符

Python 保存为json,并按json文件格式换行,中文不乱码

在 Python 中将 JSON 转换为换行符分隔的 JSON

从python中的json文件中删除行

字典(JSON)数据写入文件并换行,Python

字典(JSON)数据写入文件并换行,Python