【问题标题】:Sorting objects and lists in nested JSON对嵌套 JSON 中的对象和列表进行排序
【发布时间】:2022-01-19 11:09:01
【问题描述】:

我有这个 JSON:

{
  "data": [
    {
      "Contact": {
        "Name": "Name_of_the_shop"
      },
      "Date": "2022-01-01T11:11:13",
      "DueDate": "2022-01-01T11:11:13",
      "VAT": false,
      "Items": [
        {
          "Code": "3",
          "Description": "Sales",
          "Quantity": 1,
          "TaxAmount": 1,
          "TaxType": "3",
          "UnitAmount": 10
        },
        {
          "AccountCode": "1",
          "Description": "Discount",
          "Quantity": 1,
          "TaxAmount": -0.2,
          "TaxType": "4",
          "UnitAmount": -2
        },
        {
          "AccountCode": "1",
          "Description": "Discount",
          "Quantity": 3,
          "TaxAmount": 1.9,
          "TaxType": "4",
          "UnitAmount": -5
        },
        {
          "Code": "3",
          "Description": "Sales",
          "Quantity": 2,
          "TaxAmount": 1,
          "TaxType": "3",
          "UnitAmount": 8
        }
      ],
      "Payments": [],
      "Reference": "Orders closed 1 Febuary 2022"
    }
  ]
}

这段代码提取所有键和值:

def get_keys_and_values(data, key_list, value_list):
    for key, value in data.items():
        key_list.append(key)
        if not isinstance(value, list) and not isinstance(value, dict):
            value_list.append([key, value])
        if isinstance(value, dict):
            get_keys_and_values(value, key_list, value_list)
        elif isinstance(value, list):
            for val in value:
                get_keys_and_values(val, key_list, value_list)
    return key_list, value_list

我想对这个 JSON 中的所有字典和列表进行排序,这样即使 JSON 中的顺序发生变化,输出(key_list 和 value_list)也始终相同。 (我不想对 key_list 进行排序,而 value_list 必须在这里完成)。我对 Python 比较陌生,我在这里被困了一段时间,我会很感激任何帮助:)

预期输出:

key_list:

['AccountCode', 'AccountCode', 'Code', 'Code', 'Contact', 'Date', 'Description', 'Description', 'Description', 'Description', 'DueDate', 'Items', 'Name', 'Payments', 'Quantity', 'Quantity', 'Quantity', 'Quantity', 'Reference', 'TaxAmount', 'TaxAmount', 'TaxAmount', 'TaxAmount', 'TaxType', 'TaxType', 'TaxType', 'TaxType', 'UnitAmount', 'UnitAmount', 'UnitAmount', 'UnitAmount', 'VAT', 'data']

值列表:

[
['Date', '2022-01-01T11:11:13'],
['DueDate', '2022-01-01T11:11:13'],
['Name', 'Name_of_the_shop'],
['Reference', 'Orders closed 1 Febuary 2022']
['VAT', False],
[['AccountCode', '1'], ['Description', 'Discount'], ['TaxAmount', -0.2], ['TaxType', '4'], ['Quantity', 1], ['UnitAmount', -2]],
[['AccountCode', '1'], ['Description', 'Discount'], ['TaxAmount', 1.9], ['TaxType', '4'], ['Quantity', 3], ['UnitAmount', -5]],
[['Code', '3'], ['Description', 'Sales'], ['TaxAmount', 1], ['TaxType', '3'], ['Quantity', 1], ['UnitAmount', 10]],
[['Code', '3'], ['Description', 'Sales'], ['TaxAmount', 1], ['TaxType', '3'], ['Quantity', 2], ['UnitAmount', 8]]
]

【问题讨论】:

  • 请发布您想要的输出。
  • @timgeb 我在帖子中添加了加速输出
  • 任何一致的排序都适合我

标签: python json sorting nested


【解决方案1】:

尝试使用带有 sort_keys 功能的 json 库。

import json

sorted_json_data = json.dumps(data, sort_keys=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2019-06-25
    • 2016-07-09
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多