python 从json数组中删除多余的键值

我有一个包含对象数组的 json 文件,文件内的数据如下所示:


[

 {‘name’: ‘A’,

 ‘address’: ‘some address related to A’,

 ‘details’: ‘some details related to A’},

 {‘name’: ‘B’,

 ‘address’: ‘some address related to A’,

 ‘details’: ‘some details related to B’},

 {‘name’: ‘C’,

 ‘address’: ‘some address related to A’,

 ‘details’: ‘some details related to C’}

]

我想删除多余的键值,所以输出应该是这样的:


  [

   {‘name’: ‘A’,

   ‘address’: ‘some address related to A’,

   ‘details’: ‘some details related to A’},

   {‘name’: ‘B’,

   ‘details’: ‘some details related to B’},

   {‘name’: ‘C’,

   ‘details’: ‘some details related to C’}

  ]

所以,我尝试过这段代码,在此链接中找到了它:


import json


with open(‘./myfile.json’) as fp:

    data= fp.read()

  

unique = []

for n in data:

    if all(unique_data["address"] != data for unique_data["address"] in unique):

        unique.append(n)


#print(unique)   

with open(“./cleanedRedundancy.json”, ‘w’) as f:

     f.write(unique)

但它给了我这个错误:


TypeError: string indices must be integers


芜湖不芜
浏览 61回答 1
1回答

动漫人物

我做了有/没有文件支持的解决方案,默认情况下没有,对于您的情况,支持文件更改use_files = False到use_files = True我的脚本内部。我预计您想要删除具有相同(键,值)对的重复项。在线尝试一下!import jsonuse_files = False# Only duplicates with next keys will be deletedonly_keys = {'address', 'complex'}if not use_files:    fdata = """    [     {       "name": "A",       "address": "some address related to A",       "details": "some details related to A"     },     {       "name": "B",       "address": "some address related to A",       "details": "some details related to B",       "complex": ["x", {"y": "z", "p": "q"}],       "dont_remove": "test"     },     {       "name": "C",       "address": "some address related to A",       "details": "some details related to C",       "complex": ["x", {"p": "q", "y": "z"}],       "dont_remove": "test"     }    ]    """if use_files:    with open("./myfile.json", 'r', encoding = 'utf-8') as fp:        data = fp.read()else:    data = fdataentries = json.loads(data)unique = set()for e in entries:    for k, v in list(e.items()):        if k not in only_keys:            continue        v = json.dumps(v, sort_keys = True)        if (k, v) in unique:            del e[k]        else:            unique.add((k, v))if use_files:    with open("./cleanedRedundancy.json", "w", encoding = 'utf-8') as f:        f.write(json.dumps(entries, indent = 4, ensure_ascii = False))else:    print(json.dumps(entries, indent = 4, ensure_ascii = False))输出:[    {        "name": "A",        "address": "some address related to A",        "details": "some details related to A"    },    {        "name": "B",        "details": "some details related to B",        "complex": [            "x",            {                "y": "z",                "p": "q"            }        ],        "dont_remove": "test"    },    {        "name": "C",        "details": "some details related to C",        "dont_remove": "test"    }]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python