Как удалить значения (в моем случае «телефоны») из файла json - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок в синтаксисе файла json, и мне было интересно, как удалить "phone" и его значения из моего файла json, чтобы end, start, alignWord и word были моими единственными значениями в ключе слов .

Мой код:

with open('dest_file.json', 'w') as dest_file:
    with open('test1.json', 'r') as j:
        contents = json.loads(j.read())
        for value in contents['words']:
            del(value['case'])
            del(value['endOffset'])
            del(value['startOffset'])
        dest_file.write(json.dumps(contents,indent = 4))

Пример JSON объект:

"words": [
        {
            "alignedWord": "the",
            "end": 6.31,
            "phones": [
                {
                    "duration": 0.09,
                    "phone": "dh_B"
                },
                {
                    "duration": 0.05,
                    "phone": "iy_E"
                }
            ],
            "start": 6.17,
            "word": "The"
        },

В дополнение к этому, каким именно типом данных являются телефоны и почему я не был ли удалить его через мой текущий код?

Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

Попробуйте:

Если вы хотите сохранить отредактированный json в новый файл:

import json

with open('dest_file.json', 'w') as dest_file:
    with open('source_file.json', 'r') as source_file:
        for line in source_file:
            element = json.loads(line.strip())
            if 'phones' in element:
                del element['phones']
            dest_file.write(json.dumps(element))

Если вы хотите перезаписать в тот же json после редактирование:

import json

with open('dest_file.json') as data_file:
    data = json.load(data_file)

for element in data:
    if 'phones' in element:
        del element['phones']

with open('dest_file.json', 'w') as data_file:
    data = json.dump(data, data_file)
0 голосов
/ 24 февраля 2020

«Телефоны» в указанном выше случае будут списком словарей. Также «слова» сами по себе являются списком самих словарей. Сначала вам нужно получить доступ к элементам в списке, а затем перейти к всплывающим словарям, как предложено выше.

words =[
        {
            "alignedWord": "the",
            "end": 6.31,
            "phones": [
                {
                    "duration": 0.09,
                    "phone": "dh_B"
                },
                {
                    "duration": 0.05,
                    "phone": "iy_E"
                }
            ],
            "start": 6.17,
            "word": "The"
        }
]

для отображения одного элемента:

words[0]['phones']

для удаления:

words[0].pop('phones')

Вы можете использовать приведенный выше код для итерации и всплытия в соответствии с предложением!

0 голосов
/ 24 февраля 2020

Внутри JSON элементов, вы можете манипулировать данными как массив / список, или как диктовку. В этом случае вы можете выполнить value.pop("phones").

, например,

import json

data = '''
[
{
    "alignedWord": "the",
    "end": 6.31,
    "phones": [
        {
            "duration": 0.09,
            "phone": "dh_B"
        },
        {
            "duration": 0.05,
            "phone": "iy_E"
        }
    ],
    "start": 6.17,
    "word": "The"
}]'''

contents = json.loads(data)
for value in contents:
  value.pop('phones')

print(json.dumps(contents))

Посмотреть, как работает: https://repl.it/repls/DarkgreyLightcoralInstitution

...