Добавить массив объекта в существующий файл JSON через скрипт Python - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу добавить объект массива для "O_data" всякий раз, когда я запускаю python скрипт. В настоящее время я жестко кодирую значение.

Я пытаюсь следующий код и imoprting JSON:
Передача значений вручную на данный момент, и значение будет проходить через аргумент. Всякий раз, когда я буду запускать этот скрипт, в новый массив будут добавляться только gap1 gap2 gap3 и gap4. logid и pipename будут одинаковыми, я никогда не изменюсь. Поэтому, пожалуйста, помогите вам.


logid = 100
pipename = "abc"
gap1 = 0.25
gap2 = 0.44
gap3 = 0.65
gap4 = 0.56
TA= "TA"

def write_json(data, filename='out1234.json'):
    with open(filename, 'a') as f:
        json.dump(data, f, indent=2, ensure_ascii=False)


var1 = {'Gap1': gap1, 'Gap2': gap2, 'Gap3': gap3, 'Gap4': gap4}

result1 = {"logid": logid,
                   "pipename": pipename,
                   "TA": TA,
                    "O_data":[var1],}

write_json(result1)

, и я получаю следующий результат, если я запускаю файл дважды:

{
  "logid": 100,
  "pipename": "abc",
  "TA": "TA",
  "O_data": [
    {
      "Gap1": 0.25,
      "Gap2": 0.44,
      "Gap3": 0.65,
      "Gap4": 0.56
    }
  ]
}{
  "logid": 100,
  "pipename": "abc",
  "TA": "TA",
  "O_data": [
    {
      "Gap1": 0.25,
      "Gap2": 0.44,
      "Gap3": 0.65,
      "Gap4": 0.56
    }
  ]
}

Но я хочу получить результат в формате JSON, например:

{
  "logid": 100,
  "pipename": "abc",
  "TA": "TA",
  "O_data": [
    {
      "Gap1": 0.25,
      "Gap2": 0.44,
      "Gap3": 0.65,
      "Gap4": 0.56
    },
    {
      "Gap1": 0.25,
      "Gap2": 0.44,
      "Gap3": 0.65,
      "Gap4": 0.56
    }
  ]
}

Любая помощь приветствуется. Заранее спасибо.

1 Ответ

1 голос
/ 06 февраля 2020

Вы добавляете новый JSON к уже существующему (как текст, что видно по отсутствию запятой между} {). Это не то же самое, что добавление значения в поле «O_data».

import json

def read_json(filename):
    with open(filename, 'r') as f:
        return json.load(f)

def write_json(filename, data):
    with open(filename, 'w') as f:
        json.dump(data, f)

data = read_json('file.json')
data['O_data'].append(stuff)

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