Python 将JSON元素转换为数组
我是Python新手,已经有一段时间没有编写代码了。有没有办法将JSON结构中的元素转换为数组 示例 鉴于:Python 将JSON元素转换为数组,python,arrays,json,element,Python,Arrays,Json,Element,我是Python新手,已经有一段时间没有编写代码了。有没有办法将JSON结构中的元素转换为数组 示例 鉴于: { "persons": { "city": "Seattle", "name": "Brian" } } 所需: { "persons": [ { "city": "Seattle", "name": "Brian"
{
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
所需:
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
背景:
我想使用重复记录将JSON插入到一个大查询表中。
但是这些字段不需要重复,只是在某些情况下会发生。一旦我有了一个数组,一切正常,如果数组丢失,就会返回一个错误。
现在,我正在寻找一些python函数,其中我可以说,使persons元素成为一个包含一个元素的数组
致意
编辑:
要更具体一些,请执行以下操作:
我的结构如下所示
{
"a" : {
"b" : [
{
"c" : {
"foo" : "bar",
...
},
"d" : {
"foo" : "bar",
...
},
"e" : "bar"
},
{
"c" : [
{
"foo" : "bar",
...
},
{
"foo" : "bar",
...
},
{
"foo" : "bar",
...
},
{
"foo" : "bar",
...
},
{
"foo" : "bar",
...
}
],
"d" : {
"foo" : "bar",
...
},
"e" : "bar"
},
{
"c" : {
"foo" : "bar",
...
},
"d" : {
"foo" : "bar",
...
},
"e" : "bar"
}
]
},
"f" : {
"foo" : "bar",
....
}
}
b和c可以重复,但不必重复。无论如何,我需要两个元素作为一个数组。最好的方法是使用JSON、b和c作为输入的可重用函数,因为我们有不同结构的不同JSON文件
目前,我尝试使用@ajrwhite方法来实现我的要求,但我有点吃力 您可以将特定元素更改为列表并重新分配:
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
print(j_data)
输出:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
使用缩进
参数进行漂亮打印:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
输出:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
编辑:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
如果要将所有元素转换为列表,可以使用一个简单的循环:
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
},
"cars":
{
"car1": "Tesla",
"car2": "Toyota"
}
}
for elem in j_data:
j_data[elem] = [j_data[elem]]
# print(j_data)
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
输出:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
您可以将特定元素更改为列表并重新分配:
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
print(j_data)
输出:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
使用缩进
参数进行漂亮打印:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
输出:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
编辑:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
如果要将所有元素转换为列表,可以使用一个简单的循环:
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
},
"cars":
{
"car1": "Tesla",
"car2": "Toyota"
}
}
for elem in j_data:
j_data[elem] = [j_data[elem]]
# print(j_data)
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
输出:
{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}
j_data = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
j_data['persons'] = [j_data['persons']]
import json
print(json.dumps(j_data, indent=4, sort_keys=True))
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
]
}
{
"persons": [
{
"city": "Seattle",
"name": "Brian"
}
],
"cars": [
{
"car1": "Tesla",
"car2": "Toyota"
}
]
}
在Python中使用深度嵌套的JSON样式结构(例如,使用MongoDB摘录)时,这是一个常见问题 下面是一种递归方法,它将包含在一个大的
dict
中的所有dict
封装在[]
中:
def listify_dict(var):
if isinstance(var, dict):
output_dict = var.copy()
for k, v in var.items():
output_dict[k] = listify_dict(v)
return [output_dict]
elif isinstance(var, list):
output_list = var.copy()
for i, v in enumerate(output_list):
output_list[i] = listify_dict(v)
return output_list
else:
return var
例如:
test = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
listify_dict(test)
输出:
[{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}]
在Python中使用深度嵌套的JSON样式结构(例如,使用MongoDB摘录)时,这是一个常见问题 下面是一种递归方法,它将包含在一个大的
dict
中的所有dict
封装在[]
中:
def listify_dict(var):
if isinstance(var, dict):
output_dict = var.copy()
for k, v in var.items():
output_dict[k] = listify_dict(v)
return [output_dict]
elif isinstance(var, list):
output_list = var.copy()
for i, v in enumerate(output_list):
output_list[i] = listify_dict(v)
return output_list
else:
return var
例如:
test = {
"persons":
{
"city": "Seattle",
"name": "Brian"
}
}
listify_dict(test)
输出:
[{'persons': [{'city': 'Seattle', 'name': 'Brian'}]}]
让我们看看你到现在为止做了什么。你的一段代码。使用
json
module在你的示例中,“persons”是一个包含单个项的列表,一个字典。这是你想要的吗?您可以将JSON转换为python对象并随意处理它,使用模块您可以将措辞转换为数组,例如value=[value]
you just after-d['persons']=[d['persons']]
?向我们展示您迄今为止所做的工作。你的一段代码。使用json
module在你的示例中,“persons”是一个包含单个项的列表,一个字典。这是你想要的吗?您可以将JSON转换为python对象并随意处理它,使用模块您可以将措辞转换为数组,例如value=[value]
您是在-d['persons']=[d['persons']]
之后吗?这是手动方法,但我认为用户需要一些可以在更大的结构中自动化的东西?@ajrwhite为其编辑:)是的,这在示例中是可行的,但JSON结构通常是深度嵌套的,因此在项目上进行顶级循环是不可行的。关于递归方法@ajrwhite,请参见我的答案,但它看起来像是问题中的顶级元素操作。等待OP的回复。当然-不要批评你的答案。我可能对这个问题假设得太多了。我对JSON的经验是,在实践中,您经常尝试在不同的深度应用这种清理,使用递归通常是有意义的。这是手动方法,但我认为用户需要一些可以在更大的结构中自动化的东西?@ajrwhite为其编辑:)是的,这在示例中有效,但是JSON结构通常嵌套得很深,因此在这些项上进行顶级循环是行不通的。关于递归方法@ajrwhite,请参见我的答案,但它看起来像是问题中的顶级元素操作。等待OP的回复。当然-不要批评你的答案。我可能对这个问题假设得太多了。我对JSON的经验是,在实践中,您经常尝试在不同的深度级别应用这种清理,使用递归通常是有意义的。