使用 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 中。
我需要一些帮助,将格式为 [(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 中。