Как я могу использовать jsonpath в python, чтобы изменить значение элемента в объекте json - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть следующий объект json (скажем, car_details.json):

{
   "name":"John",
   "age":30,
   "cars":
   [
     {
       "car_model": "Mustang",
       "car_brand": "Ford"
     },
     {
       "car_model": "cx-5",
       "car_brand": "Mazda"
     } 
}

Я хочу изменить значение car_model с cx-5 на cx-9 через код Python. Я предоставляю путь json к этому элементу через внешний файл. Выражение json-path в основном представлено в виде строки. Что-то вроде этого: 'Автомобили [2] .car_model' И новое значение также предоставляется через внешний файл в виде строки: 'Сх-9'

Теперь, как мне разобрать car_details.json, используя выражение jsonpath, и изменить его значение на значение, указанное в строке, и, наконец, вернуть измененный объект json

P.S Я хочу сделать это через код Python

1 Ответ

0 голосов
/ 11 сентября 2018

Это подход без использования модуля json.Загрузите ваши данные в переменную.Затем итерируйте по ключам / значениям машин.Если вы нашли ключ, который является значением, которое вы ищете, установите его в новое значение.

Также обратите внимание: вам нужно закрыть блок массива, в противном случае указанный выше json недопустим.Обычно я использую онлайн-анализатор json для проверки правильности моих данных и т. Д. (Может пригодиться в будущем).

data =     {
       "name":"John",
       "age":30,
       "cars":
       [
         {
           "car_model": "Mustang",
           "car_brand": "Ford"
         },
         {
           "car_model": "cx-5",
           "car_brand": "Mazda"
         } 
       ]
    }

for cars in data['cars']:
    for key, value in cars.items():
        if key == "car_model" and value == "cx-5":
            cars[key] = "cx-9"
print(data)

Если вы хотите загрузить свой объект json из файла, давайте предположим, что он называется «data.json» и находится в том же каталоге, что и скрипт Python, который вы собираетесь запустить:

import json

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

for cars in data['cars']:
    for key, value in cars.items():
        if key == "car_model" and value == "cx-5":
            cars[key] = "cx-9"

print(data)

Теперь, если вы хотите записать содержимое в исходный файл или новый файл, в этом случае я пишу в файл с именем "newdata.json":

import json
import re

with open('data.json') as json_data:
    data = json.load(json_data)
    print(data)

with open('external.txt') as f:
   content = f.read()
   print(content)

for cars in data['cars']:
    for key, value in cars.items():
        if key == "car_model" and value == "cx-5":
            cars[key] = content 

with open('newdata.json', 'w') as outfile:
    json.dump(data, outfile)
...