如何重构 json 内容 - 将其转换为 jsonlines

atp*_*atp 1 python json

我有一个 json 文件,它是使用rest api 调用生成的,如下所示:

import json
resp = requests.get('https://....offset=0&limit=500&where=....', headers=headers)
json_data = json.loads(resp.text)

with open('strings.json') as f:
    d = json.load(f)
    print(d)
Run Code Online (Sandbox Code Playgroud)

在变量中读取它后d,我得到以下结构数据:

d = [{}, {}, {},{}]
Run Code Online (Sandbox Code Playgroud)

我想将上述数据结构转换为以下格式并将其存储在 json 文件中,该文件也称为 jsonlines https://jsonlines.org/examples/

required_format = {}{}{}{}
Run Code Online (Sandbox Code Playgroud)

在某种程度上,我想删除外部方括号以及相邻字典之间的空格、逗号,然后再次将其存储为 json 或任何其他文件格式,甚至不带扩展名。该文件在 Chrome 或任何其他浏览器中打开后应具有此结构。

 {}{}{}{}
Run Code Online (Sandbox Code Playgroud)

LMD*_*LMD 5

[{}, {}, {},{}]
Run Code Online (Sandbox Code Playgroud)

是有效的 JSON。

{}{}{}{}
Run Code Online (Sandbox Code Playgroud)

不是。它是一种不同的、基于 JSON 的序列化格式(“JSON 行”显然使用行作为分隔符)。您应该能够使用列表理解和对象的一些 JSON 序列化来简单地生成它:

"".join([json.dumps(obj) for obj in d])
Run Code Online (Sandbox Code Playgroud)

这将产生一个字符串。如果您想直接写入文件,请使用json.dump

with f as io.open(..., "w"):
    for obj in d:
        json.dump(obj, f)
Run Code Online (Sandbox Code Playgroud)

编辑:由于所需的格式显然是“JSON行”格式,因此只需在写入文件时发出换行符或在字符串化时使用它们进行连接(顺便说一句,您想要尾随换行符吗?)。那么代码就变成了下面这样:

"\n".join([json.dumps(obj) for obj in d])
Run Code Online (Sandbox Code Playgroud)

with f as io.open(..., "w"):
    for obj in d:
        json.dump(obj, f)
        f.write("\n")

Run Code Online (Sandbox Code Playgroud)

分别。