【问题标题】:Looping through JSON structured data循环访问 JSON 结构化数据
【发布时间】:2018-06-21 02:26:40
【问题描述】:

我编写了一个连接到 sql 数据库并返回查询的 python 脚本。我获取此查询并循环遍历它以将其存储在列表中,然后将其写入 JSON 文件。

我目前正在编写一个单独的脚本,该脚本将从 JSON 文件中检索此数据并循环遍历它以仅根据某些条件返回数据。

JSON 格式有许多几乎相同的记录,如下所示:

{
    "email": "EMAIL@HOTMAIL.COM",
    "reason_code": "PENDING",
    "product": "SWRD",
    "record_id": "0000000001"
},
{
    "email": "EMAIL@HOTMAIL.COM",
    "reason_code": "CONFIRM",
    "product": "KNFE",
    "record_id": "0000000001"
}

我想遍历这个文件,只将满足以下条件的记录返回到一个列表中:

  1. 检查重复的record_id(许多会有重复的record_id)
  2. 如果 2 个record_id 重复,那么我只想将具有"product":"SWRD" 的记录返回到任意列表中
  3. 如果record_id不重复,则返回到任意列表

我是如何尝试解决这个问题的: 我已经遍历了文件并将所有内容存储在 python 列表中。我制作了该列表的副本并循环遍历两者以尝试将块返回到新列表中。那没有用。 似乎我需要遍历文件并将所有内容存储到列表中。然后似乎我需要遍历该列表,从列表中提取第一个块,将其与列表的其余部分进行比较,如果没有匹配,则将该块返回到新列表,如果有匹配然后通过基于条件的 if-else 语句。然后我会采取第二个块并再次重复这个过程。我只是不知道如何去做。

所以当我完成时,我将拥有一个没有重复 record_id 的 JSON 文件。如果有人可以帮助我,那就太好了。如果需要,我可以发布代码示例,但我必须更改一些代码才能在线发布。如果您有任何问题,请告诉我

【问题讨论】:

  • 您为此做了哪些尝试。请将它或它们添加到您的问题中,并描述为什么/如何/它们无法正常工作。
  • @martineau - 我更新了我尝试过的方法,我觉得必须解决的问题,但我不确定如何完成它。
  • 你的口头描述和看到的不一样。事实上,如果它太长或太复杂,你有必要把你拥有的东西改成更短的东西。见How to create a Minimal, Complete, and Verifiable Example。

标签: python json data-structures python-3.6


【解决方案1】:

制作{record_id: {product: json_object}}的字典,然后就可以在product的基础上进行per-record_id的处理了

import json
from collections import defaultdict

with open('input.json') as f:
     obj_list = json.load(f)

d = defaultdict(dict)
for obj in obj_list:
    d[obj['record']][obj['product']] = obj

l = []
for products in d.values():
    if 'SWRD' in products:
        l.append(products['SWRD'])
    else:
        _, product = products.popitem()  # get some other product, we don't care which
        l.append(product)

with open('output.json', 'w+') as f:
    json.dump(l, f)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多