使用 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章