Python 按名称对包含大量数组的 JSON 文件进行排序

我有一个 JSON 文件,看起来像这样,只有一个元素:


[

    {

        "test1": [

            {

                "checked": [

                    "True"

                ],

                "description": [

                    "asdasd"

                ],

                "fileName": [

                    "GT-002"

                ],

                "imgLoc": [

                    "/Images/GT-002.png"

                ],

                "material": [

                    6

                ],

                "quantity": [

                    1

                ]

            }

        ]

    }

]

我需要某种方法来对我的大型 JSON 文件进行排序fileName。现在它所做的一切都很奇怪和随机,对我来说没有任何作用。


test1并test具有相同数量的项目,但NON_BATCH例如有更多的项目,并且当它们分开时我找不到任何方法对它们进行正确排序。


我尝试过以下代码:


import json


Data_JSON = 'data.json'

BATCH_NAME = 'NON_BATCH'


with open(Data_JSON) as file:

    Data_JSON_Contents = json.load(file)

    sortedList = sorted(Data_JSON_Contents, key=lambda i: i[BATCH_NAME][0]['fileName'])

    with open(Data_JSON, mode='w+', encoding='utf-8') as file:

        json.dump(sortedList, file, ensure_ascii=True, indent=4, sort_keys=True)


如果有人知道任何工具或库或执行此操作的正确方法,我真的很感激,我已经尝试过natsort以下方法:


from natsort import natsort_keygen

natsort_key = natsort_keygen()

Data_JSON_Contents[0][BATCH_NAME][0].sort(key=natsort_key)

或者类似的东西,但对我来说没有任何作用。



犯罪嫌疑人X
浏览 90回答 1
1回答

森林海

我设法将所有内容合并到一个元组中,然后使用 对其进行排序natsort,然后将其“缝合”在一起,从而成功地缝合了一个解决方案。这是代码:import jsonfrom natsort import natsort_keygennatsort_key = natsort_keygen()Data_JSON = 'data.json'BATCH_NAME = 'NON_BATCH'file_names = []image_locations = []quantities = []description = []checkmarked = []materials = []def merge(*args):    return [(args[0][i], args[1][i], args[2][i], args[3][i], args[4][i], args[5][i]) for i in range(len(args[0]))]with open(Data_JSON) as file:    Data_JSON_Contents = json.load(file)    for item in Data_JSON_Contents[0][BATCH_NAME]:        file_names.append(item['fileName'][0])        image_locations.append(item['imgLoc'][0])        quantities.append(item['quantity'][0])        description.append(item['description'][0])        checkmarked.append(item['checked'][0])        materials.append(item['material'][0])    merged = sorted(merge(file_names, image_locations, quantities,                          description, checkmarked, materials), key=natsort_key)    for i, j in enumerate(file_names):        Data_JSON_Contents[0][BATCH_NAME].pop(0)        Data_JSON_Contents[0][BATCH_NAME].append({            'fileName': [merged[i][0]],            'imgLoc': [merged[i][1]],            'quantity': [int(merged[i][2])],            'description': [merged[i][3]],            'checked': [merged[i][4]],            'material': [merged[i][5]]        })    with open(Data_JSON, mode='w+', encoding='utf-8') as file:        json.dump(Data_JSON_Contents, file,                  ensure_ascii=True, indent=4)无论如何,它都不是简洁的代码,也不是经过优化的,但它是有效的,如果有人有一些建议可以让它变得更好、更“时尚”,我会非常乐意使用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python