使用 python 将元组转换为 JSON

Tuples conversion into JSON with python

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

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

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

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
    }]
   }
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)

已更新。

试试这个:

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 的输出,每个字典都是您问题中的形式:

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

[{'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 中。