删除 json 中不需要的元素
Delete unnecessary elements in json
我有 JSON 数据,我想删除其中不需要的元素。我正在使用 element.pop()
,这是我们正常的做法。但是我想知道如果我在 JSON 中有超过数千个元素,而我的要求只针对 element0
、element1
和 element6
,那么我又需要使用 element.pop()
.
我们有什么东西不需要弹出所有不必要的元素吗?因为,如果我的要求只是 3 个元素,那么我需要 pop
数千个元素。这需要时间。
data.json
[
{
"fields": {
"element0": "val0",
"element1": "val1",
"element2": "val2",
"element3": "val3",
"element4": "val4",
"element5": "val5",
"element6": "val6"
}
},
{
"fields": {
"element0": "val0",
"element1": "val1",
"element2": "val2",
"element3": "val3",
"element4": "val4",
"element5": "val5",
"element6": "val6"
}
}
]
python代码
import json
with open('data.json','r') as f:
s = f.read()
data = json.loads(s)
### my expectation
for element in data:
element['fields'].pop('element2', None)
element['fields'].pop('element3', None)
element['fields'].pop('element4', None)
element['fields'].pop('element5', None)
expected.json
[
{
"fields": {
"element0": "val0",
"element1": "val1",
"element6": "val6"
}
},
{
"fields": {
"element0": "val0",
"element1": "val1",
"element6": "val6"
}
}
]
如果您只需要 data
中的某些元素,您可以执行以下操作:
>>> data = [{'fields': {'element0': 'val0',
... 'element1': 'val1',
... 'element2': 'val2',
... 'element3': 'val3',
... 'element4': 'val4',
... 'element5': 'val5',
... 'element6': 'val6'}},
... {'fields': {'element0': 'val0',
... 'element1': 'val1',
... 'element2': 'val2',
... 'element3': 'val3',
... 'element4': 'val4',
... 'element5': 'val5',
... 'element6': 'val6'}}]
然后select你需要的字段,然后从嵌套结构中抓取:
>>> NEEDED = "element0", "element1", "element6"
>>> for element in data:
... fields = element['fields']
... element['fields'] = {n: fields.get(n) for n in NEEDED}
...
数据将是:
>>> data
[{'fields': {'element0': 'val0', 'element1': 'val1', 'element6': 'val6'}}, {'fields': {'element0': 'val0', 'element1': 'val1', 'element6': 'val6'}}]
或者重新创建数据:
>>> NEEDED = "element0", "element1", "element6"
>>> data2 = [{'fields': {n: ele['fields'].get(n) for n in NEEDED}} for ele in data]
我有 JSON 数据,我想删除其中不需要的元素。我正在使用 element.pop()
,这是我们正常的做法。但是我想知道如果我在 JSON 中有超过数千个元素,而我的要求只针对 element0
、element1
和 element6
,那么我又需要使用 element.pop()
.
我们有什么东西不需要弹出所有不必要的元素吗?因为,如果我的要求只是 3 个元素,那么我需要 pop
数千个元素。这需要时间。
data.json
[
{
"fields": {
"element0": "val0",
"element1": "val1",
"element2": "val2",
"element3": "val3",
"element4": "val4",
"element5": "val5",
"element6": "val6"
}
},
{
"fields": {
"element0": "val0",
"element1": "val1",
"element2": "val2",
"element3": "val3",
"element4": "val4",
"element5": "val5",
"element6": "val6"
}
}
]
python代码
import json
with open('data.json','r') as f:
s = f.read()
data = json.loads(s)
### my expectation
for element in data:
element['fields'].pop('element2', None)
element['fields'].pop('element3', None)
element['fields'].pop('element4', None)
element['fields'].pop('element5', None)
expected.json
[
{
"fields": {
"element0": "val0",
"element1": "val1",
"element6": "val6"
}
},
{
"fields": {
"element0": "val0",
"element1": "val1",
"element6": "val6"
}
}
]
如果您只需要 data
中的某些元素,您可以执行以下操作:
>>> data = [{'fields': {'element0': 'val0',
... 'element1': 'val1',
... 'element2': 'val2',
... 'element3': 'val3',
... 'element4': 'val4',
... 'element5': 'val5',
... 'element6': 'val6'}},
... {'fields': {'element0': 'val0',
... 'element1': 'val1',
... 'element2': 'val2',
... 'element3': 'val3',
... 'element4': 'val4',
... 'element5': 'val5',
... 'element6': 'val6'}}]
然后select你需要的字段,然后从嵌套结构中抓取:
>>> NEEDED = "element0", "element1", "element6"
>>> for element in data:
... fields = element['fields']
... element['fields'] = {n: fields.get(n) for n in NEEDED}
...
数据将是:
>>> data
[{'fields': {'element0': 'val0', 'element1': 'val1', 'element6': 'val6'}}, {'fields': {'element0': 'val0', 'element1': 'val1', 'element6': 'val6'}}]
或者重新创建数据:
>>> NEEDED = "element0", "element1", "element6"
>>> data2 = [{'fields': {n: ele['fields'].get(n) for n in NEEDED}} for ele in data]