Запишите json в файл из списка json - PullRequest
0 голосов
/ 02 мая 2019

Я вызываю один API несколько раз, чтобы получить результат. Результат возвращается в формате json. Я сохраняю все результаты в списке. Как только все данные получены, я записываю содержимое списка в файл, используя следующий код. Моя конечная цель - сохранить результаты в файле с допустимым json. Однако следующий код добавляет '\' к результату json в файл. Может кто-нибудь, пожалуйста, помогите мне решить проблему.

result = []
// In a for loop I append json results to this list. I have not written the code here.
// Then I use this code to write to a file.
with open(host_log_path, 'w') as log_file:
    log_file.write(json.dumps(result))

образец токового выхода с косой чертой:

["{\"hdr\":{\"msgt\":\"InitialState\",\"ver\":\"CV-NOTSET\",\"uid\":1,\"seq\":1}}"]

1 Ответ

1 голос
/ 02 мая 2019

Вывод, который вы получаете, указывает, что result содержит список строк JSON, а не список объектов.Вам не нужно звонить json.dumps(), они уже отформатированы как JSON.Вы должны просто написать каждую из них отдельной строкой в ​​файле журнала.

with open(host_log_path, "a") as log_file:
    for msg in result:
        log_file.write((msg if type(msg) is str else json.dumps(msg)) + "\n")

Вы также должны использовать режим a, чтобы добавить файл журнала.Ваш код очищает старое содержимое каждый раз, когда вы открываете его.

Если вы хотите записать их как один массив JSON, вы можете вызвать json.loads() в цикле.

with open(host_log_path, "w") as log_file:
    msgs = [json.loads(msg) if type(msg) is str else msg for msg in result]
    json.dump(msgs, log_file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...