我有一個包含以下資料的 JSON 檔案:
[{
"planet": "project pluto",
"records": [
{
"project": "project pluto",
"plan": "paper",
"start": 1,
"stop": 2
}
]
},
{
"planet": "project venus",
"records": [
{
"project": "project venus",
"plan": "rock",
"start": 3,
"stop": 4
}
]
},
{
"planet": "project earth",
"records": [
{
"project": "project earth",
"plan": "scissors",
"start": 5,
"stop": 6
}
]
} ]
因此,我希望我的輸出如下:
[{'planet': 'project pluto', 'records': [['project pluto', 'paper', 1, 2]]}, {'planet': 'project venus', 'records': [{'project venus','rock', 3,4}]}, {'planet': 'project earth', 'records': [{'project earth', 'scissors',5, 6}]}]
這是我目前擁有的代碼,但它僅適用于 JSON 檔案的第一部分,并且不會迭代所有其他值:
import json
with open('planets.json', 'r') as f:
data = json.loads(f.read())
data[0]['records'][0] = list(data[0]['records'][0].values())
print(data)
當我運行上面的代碼時,輸??出如下:
[{'planet': 'project pluto', 'records': [['project pluto', 'paper', 1, 2]]}, {'planet': 'project venus', 'records': [{'project': 'project venus', 'plan': 'rock', 'start': 3, 'stop': 4}]}, {'planet': 'project earth', 'records': [{'project': 'project earth', 'plan': 'scissors', 'start': 5, 'stop': 6}]}]
問題是:如何迭代并應用到 JSON 檔案中的所有值?
uj5u.com熱心網友回復:
您可以通過遍歷陣列'records'中每個物件的 來實作data。
以下是如何“就地”執行此操作(即它會data自行修改):
import json
from pprint import pprint
with open('planets.json', 'r') as f:
data = json.loads(f.read())
for obj in data:
obj['records'] = list(obj['records'][0].values())
pprint(data, sort_dicts=False)
輸出:
[{'planet': 'project pluto', 'records': ['project pluto', 'paper', 1, 2]},
{'planet': 'project venus', 'records': ['project venus', 'rock', 3, 4]},
{'planet': 'project earth', 'records': ['project earth', 'scissors', 5, 6]}]
如果您不想修改原始data陣列,則需要執行以下操作:
from copy import deepcopy
import json
from pprint import pprint
with open('planets.json', 'r') as f:
data = json.loads(f.read())
modified_data = []
for obj in data:
new_obj = {key: deepcopy(value) for key, value in obj.items() if key != 'records'}
new_obj['records'] = [deepcopy(value) for value in obj['records'][0].values()]
modified_data.append(new_obj)
pprint(modified_data, sort_dicts=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349099.html
