【问题标题】:Converting Python list in JSON在 JSON 中转换 Python 列表
【发布时间】:2021-09-17 07:05:16
【问题描述】:

我想把一个python列表转成json,这是输入

obj=([{'value1': 'a', 'value2': None, 'value3': 'abc', 'value4': 'xyz', 'value5': 'tes', 'value6': None, 'value7': None, 'value8': 'a'}],
[{'value1': 'b', 'value2': None, 'value3': 'abc', 'value4': 'uyt', 'value5': 'tuy', 'value6': None, 'value7': None, 'value8': 'b'}])

期望的输出:

{ "file": [
   {
    "value1": "a", 
    "value2": None,
    "value3": "abc",
    "value4": "uyt",
    "value5": "tuy",
    "value6": None,
    "value7": None,
    "value8": "a",
   },
   {
    "value1": "b", 
    "value2": None,
    "value3": "abc",
    "value4": "xyz",
    "value5": "tes",
    "value6": None,
    "value7": None,
    "value8": "b",
   }
]
}

PS:我关注了 StackOverflow 上的一些现有问题,但它对我不起作用。 谢谢你。 :)

【问题讨论】:

  • 可以粘贴你试过的代码吗?
  • 一开始我有一本字典,我将其转换为列表(在输入部分给出),现在我无法获得上述所需的 JSON 输出。
  • 为什么"value8": "a",应该是“b”?
  • 输入的形式是什么?因为有 2 个列表。
  • 也许是d['file'] = ls1 + ls2

标签: python json list coding-style


【解决方案1】:

这应该适用于任意数量的列表:

import json

obj = (
    [{
        'value1': 'a', 'value2': None, 'value3': 'abc', 'value4': 'xyz', 'value5': 'tes', 'value6': None, 'value7': None, 'value8': 'a'
    }], 
    [{
        'value1': 'b', 'value2': None, 'value3': 'abc', 'value4': 'uyt', 'value5': 'tuy', 'value6': None, 'value7': None, 'value8': 'b'
    }]
)

result = {'file': []}
for l in obj:
    result['file'].append(l[0])

result_json = json.dumps(result, indent=2)
print(result_json)

输出:

{
  "file": [
    {
      "value1": "a",
      "value2": null,
      "value3": "abc",
      "value4": "xyz",
      "value5": "tes",
      "value6": null,
      "value7": null,
      "value8": "a"
    },
    {
      "value1": "b",
      "value2": null,
      "value3": "abc",
      "value4": "uyt",
      "value5": "tuy",
      "value6": null,
      "value7": null,
      "value8": "b"
    }
  ]
}

【讨论】:

  • 但是这样我们不能从终端本身给出输入
  • @PYC 在他的问题中编辑了我在回答中使用的输入。另外我认为通过终端提供这样的输入是没有意义的,特别是如果有很多列表。
  • 哎呀?‍?️,我在他编辑答案之前评论了这个问题
【解决方案2】:

让我们从一个简单的开始:-

obj=([{'value1': 'a', 'value2': None, 'value3': 'abc', 'value4': 'xyz', 'value5': 'tes', 'value6': None, 'value7': None, 'value8': 'a'}],
[{'value1': 'b', 'value2': None, 'value3': 'abc', 'value4': 'uyt', 'value5': 'tuy', 'value6': None, 'value7': None, 'value8': 'b'}])
D = {'file': [li[0] for li in obj]}

【讨论】:

  • 如果有N个列表怎么办
  • 这回答了您的问题。也许您想限定您的原始问题。这样做,我会修改我的答案
【解决方案3】:

有些代码可能是多余的,但我会这样做:

import json

obj=([{'value1': 'a', 'value2': None, 'value3': 'abc'}], [{'value1': 'b', 'value2': None, 'value3': 'abc'}])

obj_list = [i[0] for i in obj]
dict1 = {"file": obj_list}

json_object = json.dumps(dict1, indent=1)
print(json_object)

【讨论】:

    【解决方案4】:

    这是您要查找的代码

    import json
    
    obj=([{'value1': 'a', 'value2': None, 'value3': 'abc', 'value4': 'xyz', 'value5': 'tes', 'value6': None, 'value7': None, 'value8': 'a'}],[{'value1': 'b', 'value2': None, 'value3': 'abc', 'value4': 'uyt', 'value5': 'tuy', 'value6': None, 'value7': None, 'value8': 'b'}])
    file = {"file": []}
    file['file'] = [i for i in obj]
    print(json.dumps(file, indent=2, sort_keys=True))
    
    

    您也可以删除 sort_keys 参数,或者如果您不希望它对事物进行排序,则将其设置为 false

    PS:如果你想减少缩进减少 2 到更低的值

    【讨论】:

      【解决方案5】:

      您可以将defaultdict 用作listjson.dumps,如下所示:

      from collections import defaultdict
      
      obj=(
          [
              {'value1': 'a', 'value2': None, 'value3': 'abc', 'value4': 'xyz', 'value5': 'tes', 'value6': None, 'value7': None, 'value8': 'a'}
          ],
          [
              {'value1': 'b', 'value2': None, 'value3': 'abc', 'value4': 'uyt', 'value5': 'tuy', 'value6': None, 'value7': None, 'value8': 'b'}
          ])
      
      dct = defaultdict(list)
      for l in obj:
          dct['file'].append((l[0]))
          
      
      dct_json = json.dumps(dct, indent=2)
      print(dct_json)
      

      输出:

      {
        "file": [
          {
            "value1": "a",
            "value2": null,
            "value3": "abc",
            "value4": "xyz",
            "value5": "tes",
            "value6": null,
            "value7": null,
            "value8": "a"
          },
          {
            "value1": "b",
            "value2": null,
            "value3": "abc",
            "value4": "uyt",
            "value5": "tuy",
            "value6": null,
            "value7": null,
            "value8": "b"
          }
        ]
      }
      

      【讨论】:

      • 如果您检查它不是所需的输出先生。这些是单引号,而不是双引号。
      • 好的,给我时间
      • @don'ttalkjustcode 已编辑答案
      • @Mr.Annonymous 再次根据您编辑的问题编辑答案
      • @Mr.Annonymous 非常感谢 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2021-01-26
      • 2020-06-03
      • 1970-01-01
      • 2012-04-03
      • 2017-11-30
      相关资源
      最近更新 更多