使用python将元组转换为JSON
我想要一些帮助,将使用python将元组转换为JSON,python,json,pandas,d3.js,data-science,Python,Json,Pandas,D3.js,Data Science,我想要一些帮助,将[(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
[(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
}]
}
已更新。请尝试以下操作:
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"}
假设您想要一个dict列表作为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中。您的预期输出不是有效的json。为什么要复制对象{“name”:“Y”,“value”:Z}
?请解释如何从输入数据获取预期输出!我已经修复了您的JSON。NameError:name'v'未定义
AttributeError:'list'对象没有属性'update'
此对象为我提供了所需的输出,但我有一个后续问题。如果我希望JSON输出在子树中有(“鸡蛋”、“香肠”2)、(“垃圾邮件”、“烘焙豆”3)作为元组。只列出一次名字和孩子。你建议我如何处理请编辑你的问题或创建一个新的问题。根据要求编辑问题。使用已经给出的答案,你应该能够自己解决其余问题。这非常有效。感谢它回答你的问题,考虑接受答案。
# 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]})