【问题标题】:loop through each line in a json file and filter the result循环遍历 json 文件中的每一行并过滤结果
【发布时间】:2022-01-07 02:04:40
【问题描述】:

您好,我有一个包含以下内容的 json 文件。我想编写一个代码来查看文件中的每一行并过滤掉 "emoji": "1" 的项目并将结果输出到另一个 json 文件。

输入

{"o": [{"item": {"emoji": "0"}}]}
{"p": [{"item": {"emoji": "1"}}]}
{"q": [{"item": {"emoji": "1"}}]}
{"r": [{"item": {"emoji": "0"}}]}

输出

{"p": [{"item": {"emoji": "1"}}]}
{"q": [{"item": {"emoji": "1"}}]}

【问题讨论】:

  • 请说明您的问题与您使用的dataframe标签有何关系
  • 您尝试了什么,有什么问题?请分享代码。
  • 这不是一个 json 文件,而是一个包含 json 行的文件... 逐行读取文件,将行转换为带有json.loads 的字典(比如data),然后检查data.values[0] 或更准确地说是data.values[0]['item']['emoji']...
  • grep -hnr -A2 -B2 --no-group-separator "{\"emoji\"\: \"1\"\}" /input.json > output.json

标签: python json dataframe


【解决方案1】:

使用 json 数据结构的最简单方法是遍历文件中的所有行并检查特定字符串是否在该行中:

filtered_json = []
with open('data.json', 'r') as file:
    for line in file:
        if '"emoji": "1"' in line:
            filtered_json.append(line)

这当然有点草率,但会很快解决。

你现在可以写filtered_json

with open('new_data.json', 'w') as file:
    new_data = '\n'.join(filtered_json)
    file.write(new_data)

处理 json 数据的更复杂的方法是使用 json 包:

import json
filtered_json = []
with open('data', 'r') as file:
    for line in file:
        j = json.loads(line)
        if int(j[list(j.keys())[0]][0]['item']['emoji']) == 1:
             filtered_json.append(j)

这很糟糕,将数据写入文件也会很奇怪。


我们可以通过将您的 json 数据更改为实际的 json 格式来改善这一点:

旧数据.json:

{"q": [{"item": {"emoji": "1"}}]}
{"r": [{"item": {"emoji": "0"}}]}

新数据.json:

{
    "r": {"item": {"emoji": 0}},
    "q": {"item": {"emoji": 1}}
}

我们现在可以通过使用 json 包以更简单的方式使用这个新的 data.json 文件:

import json
with open('data.json', 'r') as file:
    j = json.load(file)
    filtered_json = {}
    for key in j.keys():
        if j[key]['item']['emoji'] == 1:
            filtered_json[key] = j[key]

通过修改 json 文件,我们实现了更简单的代码。我们甚至可以像这样使用字典推导:

with open('data.json', 'r') as file:
    j = json.load(file)
    filtered_data = {k: v for k, v in j.items() if v['item']['emoji'] == 1}

这可能是最pythonic的方式


您可以在这里写filtered_json,只需调用:

with open('new_data.json', 'w') as file:
    json.dump(filtered_json, file)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多