Есть ли способ просто захватить одно подмножество данных json из большого текстового файла?

#python

#python

Вопрос:

Я хочу извлечь поле «name» из большого текстового файла json и иметь возможность сохранить их в другом файле на потом, но я получаю все данные, которые были в моем предыдущем файле json, хотя и слегка измененные. Как мне сделать так, чтобы я получал данные только после поля «name»: в моем файле json?

Я пробовал

 names = []

with open('./out.json', 'r') as f:
    data = json.load(f)

for name in data:
    names.append(data[name])

with open('./names.json','w') as f:
    for name in names:
        f.write('%srn' % name)
 

и я получаю обратно свой точный файл json, без форматирования и u’ перед всем, вероятно, из json.load(f), но я понятия не имею, как это исправить.

мой текстовый файл отформатирован следующим образом, если это имеет значение:

 {
"array":[
{
  "name": "Seranul",
  "id": 5,
  "type": "Paladin",
  "itemLevel": 414,
  "icon": "Paladin-Holy",
  "total": 11107150,
  "activeTime": 2205387,
  "activeTimeReduced": 2205387
},
{
  "name": "Contherious",
  "id": 9,
  "type": "Hunter",
  "itemLevel": 412,
  "icon": "Hunter-Marksmanship",
  "total": 51102811,
  "activeTime": 2637303,
  "activeTimeReduced": 2637303
},
{
  "name": "Unicorns",
  "id": 17,
  "type": "Priest",
  "itemLevel": null,
  "icon": "Priest",
  "total": 12252005,
  "activeTime": 1768883,
  "activeTimeReduced": 1761797
},
...
}
]}
 

Я ожидаю увидеть соответствующие данные для каждого поля имени, но я получаю весь свой документ обратно.

Ответ №1:

Похоже, что ваш код игнорирует структуру данных JSON. В частности, вы перебираете ключи в словаре JSON, что просто array , а затем добавляете значение в names свой список. Это приводит к тому, что все array свойство помещается в вашу names переменную.

Вот что, я полагаю, вы хотите: выполните итерацию по записям в array and и их списку, затем экспортируйте это как JSON в другой файл.

 import json


names = []

with open('./out.json', 'r') as f:
    data = json.load(f)

for entry in data["array"]:
    names.append(entry["name"])

with open('./names.json', 'w') as f:
    f.write(json.dumps(names))
 

Это приведет к следующему JSON в names.json :

 ["Seranul", "Contherious", "Unicorns"]