Заменить строковое значение из JSON в список - PullRequest
0 голосов
/ 04 ноября 2019

У меня похожая структура Json:

{
    "test": [
        {
            "name1": "tap",
            "name2": "Tik; eev; asdv; asdfa; sadf"
        },
        {
            "name1": "Pap",
            "name2": "Tik; eev; asdv; asdfa; sadf"
        }
    ]
}

Я хочу, чтобы value ключа name2 был списком. Например:

value "Tik; eev; asdv; asdfa; sadf" заменено на ['Tik', ' eev', ' asdv', ' asdfa', ' sadf']

Это то, что я сделал, но я не могу обновить json на новый.

import json

with open('testJson.json') as f:
    data = json.load(f)

for x in data['test']:
    string = x['name2']
    my_list = string.split(";")
    string = my_list


with open('testdata.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

Когда я открываю testdata.json то же самое.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Вам необходимо назначить разделенный список обратно данным. В вашем коде вы просто отбрасываете его. Вы воспринимаете x['name2'] как ссылку на строку, а не на строковое значение. Вы не можете присвоить ее другой переменной и ожидать, что это будет отражено в структуре данных - вам нужно явно обновить структуру данных новым значением.

import json

with open('testJson.json') as f:
    data = json.load(f)

for x in data['test']:
    string = x['name2']
    my_list = string.split(";")
    x['name2'] = my_list


with open('testdata.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)
1 голос
/ 04 ноября 2019

Когда вы делаете

string = ingredient['name2']
[...]
string = my_list

, вы получаете строку без контекста, в котором она была. - string - это просто имя, которое хранит некоторое содержимое, оно не ссылается на ingredient словарь.

Вам необходимо изменить последнюю строку здесь на ingredient['name2'] = my_list, чтобы изменить внутреннюю часть словаря, а не какую-нибудь локальную строку. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...