Как добавить значение для ключа в файле JSON с помощью Python - PullRequest
0 голосов
/ 22 ноября 2018
        data={}
        data['intents']=[]
        data['intents'].append({
            'tag': tag,
            'patterns': patterns,
            'response': response
        })
        with open('training.json', 'a') as training:

            json.dump(data, training)

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

{"intents": [{"response": "customize", "patterns": "erp", "tag": "purchase"}]}{"intents": [{"response": "kjj", "tag": "sales", "patterns": "jjkj"}]}

я хочу получить вывод в следующем формате:

{"intents":[
        {"tag":"sale",
         "patterns":["ptr1","ptr2"],
         "responses":["resp1","resp2"]
        },
        {"tag":"purchase",
         "patterns":["abc","def"],
         "responses":["xyz","zzz"]
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы не можете добавлять новые данные, это сломает ваш JSON, вы должны заменить данные.И не сосредотачивайтесь на отступе, его не обязательно, попробуйте это:

import json
data={}
data['intents']=[]
data['intents'].append({
    'tag': 'tag',
    'patterns': 'patterns',
    'response': 'response'
})
try:
    with open('training.json', 'r') as training:
        old_data = training.readlines()
        if old_data:
            old_data = json.loads(old_data[0])
            for intents in data['intents']:
                old_data['intents'].append(intents)
            data = old_data
            old_data = None
    with open('training.json', 'w') as training:
        json.dump(data, training)
except:
    with open('training.json', 'w') as training:
        json.dump(data, training)
0 голосов
/ 22 ноября 2018

Поскольку вы хотите добавить элемент в список объекта (а не добавлять текст к самому файлу json), вам необходимо сначала прочитать json, затем добавить и написать:

import os

data = {'intents': []}
if os.path.exists('training.json'):
    with open('training.json', 'r') as f:
        data = json.load(f)

data['intents'].append({
            'tag': tag,
            'patterns': patterns,
            'response': response
})

with open('training.json', 'w') as training:
    json.dump(data, training)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...