遍历JSON结构化数据

时间:2018-06-21 02:26:40

标签: python json data-structures python-3.6

我编写了一个python脚本,该脚本连接到sql数据库并返回查询。我获取此查询并循环遍历以将其存储在列表中,然后将其写入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"的记录返回到random_list
  3. 如果record_id不重复,则返回任意列表

我如何解决该问题: 我遍历了文件并将所有内容存储在python列表中。我复制了该列表,然后遍历这两个列表,尝试将块返回到新列表中。那没有用。 似乎我需要遍历文件并将所有内容存储到列表中。然后好像我需要遍历该列表,从列表中提取第一个块,将其与列表的其余部分进行比较,如果不匹配,则将该块返回到新列表,如果有匹配,然后根据条件通过if-else语句。然后,我将第二个程序段重复一遍。我只是不确定如何去实现这一目标。

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

1 个答案:

答案 0 :(得分:0)

制作一个{record_id: {product: json_object}}的字典,然后您可以基于record_id进行每product的处理

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)