【问题标题】:Python: Convert a list of python dictionaries to an array of JSON objectsPython:将 Python 字典列表转换为 JSON 对象数组
【发布时间】:2012-07-03 23:49:06
【问题描述】:

我正在尝试编写一个函数来将 python 列表转换为 {"mpn":"list_value"} 对象的 JSON 数组,其中 "mpn" 是我需要的每个对象的文字字符串值,但 "list_value"是 python 列表中的值。我会将此函数的输出用于 API 获取请求。

part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    d = {}
    for pn in list:
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst, separators=(',',':'))

print json_list(part_nums)

此当前函数不起作用,并返回所有 JSON 对象的 Python 列表中的最后一个值:

>[{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"}]

但是,我当然需要我的函数来返回对象中的唯一列表值:

>[{"mpn":"ECA-1EHG102"},{"mpn":"CL05B103KB5NNNC"},{"mpn":"CC0402KRX5R8BB104"}]

底线是我不明白为什么这个功能不起作用。我希望我可以将带有单个 {key:value} 对的字典附加到 python 列表中,并且所有字典都具有相同的键并不重要,因为它们是独立的。感谢您的帮助。

【问题讨论】:

  • d = {}向下移动两行,在for

标签: python json


【解决方案1】:

您正在将完全相同的字典添加到列表中。您应该为列表中的每个项目创建一个新字典:

json.dumps([dict(mpn=pn) for pn in lst])

【讨论】:

  • 感谢您的出色解决方案。
  • 我们可以反过来做吗?将作为 json 对象数组的字符串转换为 dict ?
  • @divyenduz:“反向”是将包含 json 对象数组的 json 文本转换为 list 字典。是的,我们可以:list_of_dicts = json.loads(json_text)。如果有不清楚的地方,ask
【解决方案2】:

正如其他人所解释的(在答案中),您应该为列表中的每个项目创建一个新词典,您在其他地方引用始终相同的词典

import json
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    for pn in list:
        d = {}
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst)

print json_list(part_nums)

打印

[{"mpn": "ECA-1EHG102"}, {"mpn": "CL05B103KB5NNNC"}, {"mpn": "CC0402KRX5R8BB104"}]

【讨论】:

  • Doh,非常感谢您提供与我的原始(不优雅)代码相匹配的解决方案。单行解决方案显然是更好的代码,但我感谢您揭示我的错误。
【解决方案3】:
import json
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    for pn in list:
        d = {}
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst)

print json_list(part_nums)   # for pyhon2
print (json_list(part_nums)) # for python3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2015-10-16
    • 2014-02-26
    • 2022-01-05
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多