使用 python 将元组转换为 JSON [关闭]

Posted

技术标签:

【中文标题】使用 python 将元组转换为 JSON [关闭]【英文标题】:Tuples conversion into JSON with python [closed] 【发布时间】:2016-10-14 19:37:25 【问题描述】:

我需要一些帮助,将 [(X, Y, Z),(..) 类型的 (string, string, int)] 类型的元组转换为以下格式的 JSON 文件:


    "name": "X",
    "children": [
        "name": "Y",
        "value": Z
    ]

我至少有 1M 值要转换,目前我尝试使用字典的键:

b = (dict(zip(keys,row)) for row in tuples)  

使用 JSON 库

print (json.dumps(list(b)))  

但是这会产生格式为

的 JSON
["type": "y", "name": "z", "count": z,...  

我希望 Y 和 Z 值嵌套在子项下,并且 X 值在每个唯一字符串中使用一次。

   
    "name": "X",
    "children": [
        "name": "Y",
        "value": Z
    ,
                
        "name": "Y2",
        "value": Z2
    ]
   

【问题讨论】:

您的预期输出不是有效的 JSON。 为什么要复制对象"name": "Y", "value": Z 请解释如何从您的输入数据中获取您的预期输出! 我已经修复了你的 JSON。 【参考方案1】:
import json 
list_of_tuples = [('jack', 'jill', 5), ('baba','black', 6)]
result = list()
for each_tuple in list_of_tuples:
    temp = dict()
    temp['name'] = each_tuple[0]
    temp['children'] = ['name': each_tuple[1],'value':each_tuple[2]]
    result.append(temp)

json.dumps(result)

已更新。

【讨论】:

NameError: name 'v' is not defined AttributeError: 'list' object has no attribute 'update'【参考方案2】:

假设您想要一个 dicts 列表作为 json 的输出,每个 dict 都是您问题中的形式:

以下一行将把它放入您寻找的数据结构中,每个元组生成它自己的完整结构:

['name':i[0], 'children': ['name': i[1], 'value': i[2]]  for i in tuples]

但我怀疑您希望外部名称是唯一的,内部子代是由多个元组构建的,这样只有一个使用 'name' == X 生成的此类结构。

要以内存高效的方式执行此操作,请先按 X 对元组进行排序:

# should work as long as you aren't doing any fancy sorting
stuples = sorted(tuples) 

name = None
dat = None
for t in stuples:
    if name != t[0]:
        if dat is not None:
            writeDat(json.dumps(dat))
        name = t[0]
        dat = 'name': t[0], 'children': ['name': t[1], 'value': t[2]]
    else:
        dat['children'].append('name': t1, 'value': t[2])

我假设你有一个函数可以写出其中一个函数,例如 writeDat(),它接受 json,所以你不会将它们全部存储在 ram 中。

【讨论】:

这绝对完美。谢谢 如果它回答了您的问题,请考虑接受答案。【参考方案3】:

试试这个:

import json

ts = [("egg", "bacon", 1), ("egg", "sausage", 2), ("spam", "baked beans", 3)]
for t in ts:
    o = "name": t[0], "children": ["name": t[1], "value": t[2]]
    j = json.dumps(o)
    print(j)

输出:

"children": ["name": "bacon", "value": 1], "name": "egg"
"children": ["name": "sausage", "value": 2], "name": "egg"
"children": ["name": "baked beans", "value": 3], "name": "spam"

【讨论】:

这个给了我想要的输出,但是我有一个后续问题。如果我希望 JSON 输出具有 ("egg", "sausage", 2), ("spam", "baked beans", 3) 作为子树内的元组。只列出了一次姓名和孩子。你建议我如何继续 请编辑您的问题或创建一个新问题。 按要求编辑了问题 有了已经给出的答案,您应该能够自己解决剩下的问题。

以上是关于使用 python 将元组转换为 JSON [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python:将元组转换为二维数组

Python:将元组列表转换为dict列表

python 将元组列表,字典转换为数据帧

Python:将元组列表转换为对象列表?

Python将元组转换为字符串[重复]

将元组列表转换为python中的列表