【问题标题】:How to convert a Complex list in to a JSON?如何将复杂列表转换为 JSON?
【发布时间】:2022-01-23 22:58:36
【问题描述】:

我正在处理需要转换为 JSON 的复杂嵌套列表。我有一个 JSON 结构作为输出。我发现解决这个问题对我来说是一个非常复杂的问题。所以我希望stackoverflow问题解决者的解决方案。因为像我希望的那样,互联网上没有类似的问题。

Sample List as input
[
   [
      "Unit : Baht",
      "2018",
      "2018",
      "2019",
      "2019",
      "2020",
      "2020"
   ],
   [
      " ",
      "Amount",
      "%Change",
      "Amount",
      "%Change",
      "Amount",
      "%Change"
   ],
   [
      "Accounts Receivable",
      "-",
      "0.00",
      "-",
      "0.00",
      "-",
      "0.00"
   ],
   [
      "Inventories",
      "-",
      "0.00",
      "-",
      "0.00",
      "-",
      "0.00"
   ],
   [
      "Total Current Assets",
      "924,724.20",
      "394.08",
      "942,724.20",
      "1.94",
      "1,234,663.71",
      "30.96"
   ],
   [
      "Total Assets",
      "924,724.20",
      "394.08",
      "942,724.20",
      "1.94",
      "1,234,663.71",
      "30.96"
   ],
   [
      "Total Current Liabilities",
      "10,000.00",
      "-49.18",
      "20,000.00",
      "100.00",
      "22,163.43",
      "10.81"
   ],
   [
      "Total Non-current Liabilities",
      "-",
      "0.00",
      "-",
      "0.00",
      "-",
      "0.00"
   ],
   [
      "Total Liabilities",
      "10,000.00",
      "-49.18",
      "20,000.00",
      "100.00",
      "22,163.43",
      "10.81"
   ],
   [
      "Equity",
      "914,724.20",
      "446.17",
      "922,724.20",
      "0.87",
      "1,212,500.28",
      "31.40"
   ],
   [
      "Total Liabilities and Equity",
      "924,724.20",
      "394.08",
      "942,724.20",
      "1.94",
      "1,234,663.71",
      "30.96"
   ]
]

我的 JSON 结构

{
   "HeadKey":[
      {
         "Accounts Receivable":[
            {
               "2018":{
                  "Amount":"-",
                  "%Change":"0.00"
               },
               "2019":{
                  "Amount":"-",
                  "%Change":"0.00"
               },
               "2020":{
                  "Amount":"-",
                  "%Change":"0.00"
               }
            }
         ]
      },
      {
         "Inventories":[
            {
               "2018":{
                  "Amount":"-",
                  "%Change":"0.00"
               },
               "2019":{
                  "Amount":"-",
                  "%Change":"0.00"
               },
               "2020":{
                  "Amount":"-",
                  "%Change":"0.00"
               }
            }
         ]
      },
      {
         "Total Current Assets":[
            {
               "2018":{
                  "Amount":"924,724.20",
                  "%Change":"394.08"
               },
               "2019":{
                  "Amount":"942,724.20",
                  "%Change":"1.94"
               },
               "2020":{
                  "Amount":"1,234,663.71",
                  "%Change":"30.96"
               }
            }
         ]
      },
      {
         "Total Assets":[
            {
               "2018":{
                  "Amount":"10,000.00",
                  "%Change":"-49.18"
               },
               "2019":{
                  "Amount":"20,000.00",
                  "%Change":"100.00"
               },
               "2020":{
                  "Amount":"22,163.43",
                  "%Change":"10.81"
               }
            }
         ]
      }
   ]
}

注意:以上JSON是我写的。它并不完整,正如我们在列表中看到的那样,它还有更多,但 JSON 并不完整。所以我需要一个自动结构的动态算法作为示例JSON

提前致谢

【问题讨论】:

  • 很难说你没有匹配的输入和输出,但我会从:pandas.DataFrame(your_data_in) 或者pandas.DataFrame(your_data_in).transpose()开始

标签: python json python-3.x dictionary nested-lists


【解决方案1】:

为了获得结构不同于列表的 JSON 文件,I.E.您有多个级别,例如上面,您很可能需要创建一个字典对象,然后使用 json 模块转换为 JSON。

>>> import json
>>> json.dumps([1, 3])
'[1, 3]'
>>> json.dumps({"Lvl1": {"Lvl2": "Here"} })
'{"Lvl1": {"Lvl2": "Here"}}'

看起来在您的输入数据中,每个项目中的元素数量相同。 如果这是总是正确的,你可以循环

for i in range(len(input[0])):
    for item in input:
        # Do something with item[i]

并根据需要开始构建字典对象,根据需要制作列表和字典。一旦你有一本与你需要的字典相似的字典,json.dumps() 应该会处理它。

正如人们在 cmets 中指出的那样,一般来说,StackOverflow 不是询问如何做某事的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多