亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 按名稱對包含大量數組的 JSON 文件進行排序

Python 按名稱對包含大量數組的 JSON 文件進行排序

犯罪嫌疑人X 2024-01-24 21:00:42
我有一個 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 jsonData_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_keygennatsort_key = natsort_keygen()Data_JSON_Contents[0][BATCH_NAME][0].sort(key=natsort_key)或者類似的東西,但對我來說沒有任何作用。
查看完整描述

1 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

我設法將所有內容合并到一個元組中,然后使用 對其進行排序natsort,然后將其“縫合”在一起,從而成功地縫合了一個解決方案。


這是代碼:


import json

from natsort import natsort_keygen

natsort_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)



無論如何,它都不是簡潔的代碼,也不是經過優化的,但它是有效的,如果有人有一些建議可以讓它變得更好、更“時尚”,我會非常樂意使用它。



查看完整回答
反對 回復 2024-01-24
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號