Чтение json по частям

Рейтинг: -1Ответов: 1Опубликовано: 01.02.2023

Скажите пожалуйста, как при помощи python и библиотеки json, читать json файл по частям Вот часть json

{
  "map": "Desert",
  "props": [
    {
      "name": "Inflatable_boat",
      "uniqueId": 490.497925,
      "position": {
        "x": -2.94143414,
        "y": -4.11158657,
        "z": 21.5624847
      },
      "rotation": {
        "x": -0.5243113,
        "y": 0.487025142,
        "z": -0.484924853,
        "w": -0.5027446
      },
      "isKinematic": true,
      "instantiationData": null,
      "runtimeData": null
    }]
}

Мне нужно что бы при помощи библиотеки json, я нашел значение map, и заменил на свое значение

Ответы

▲ 0Принят

Можно вот так:

В файле main.json имеется вот такой исходный текст:

{"map": "Desert","props": [{"name": "Inflatable_boat","uniqueId": 490.497925,"position": {"x": -2.94143414,"y":-4.11158657,"z": 21.5624847},"rotation": {"x": -0.5243113,"y": 0.487025142,"z": -0.484924853,"w": -0.5027446},"isKinematic": true,"instantiationData": null,"runtimeData": null}]}

Код:

import json


# Открываем файл main.json на чтение
with open("./main.json", 'r', encoding='utf-8') as f:
  jn = f.read() # Читаем содержимое файла main.json в переменную
  dt = json.loads(jn) # Преобразовываем JSON в объект Python и сохраняем в переменной

# Открываем файл main.json на запись
with open("./main.json", 'w', encoding='utf-8') as f:
  dt['map'] = 'Mytext' # Меняем значение ключа map на требуемое

  dt['props'][0]['position']['x'] = 1500
  dt['props'][0]['position']['y'] = 1501
  dt['props'][0]['position']['z'] = 1502

  f.write(json.dumps(dt)) # Преобразовываем объект Python в JSON строку и получившийся результат записываем в файл main.json

В результате получаем следующий текст в файле main.json:

{"map": "Mytext", "props": [{"name": "Inflatable_boat", "uniqueId": 490.497925, "position": {"x": -2.94143414, "y": -4.11158657, "z": 21.5624847}, "rotation": {"x": -0.5243113, "y": 0.487025142, "z": -0.484924853, "w": -0.5027446}, "isKinematic": true, "instantiationData": null, "runtimeData": null}]}