Как изменить значения в файле JSON, используя JsonPath в Python - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующий файл Json: car_models.json

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

У меня есть другой файл json data_change.json, который содержит сведения о jsonpath и их значениях:

{
  "testcase_ID": "test_1A",
  "description": "Some description",
  "request_change_data": [
    {
      "element_path": "$.cars.[0].car_model",
      "element_value": "focus"
    }
  ]
}

Я хочу прочитать содержимое data_change.json, отсюда использовать element_path, проанализировать car_models.json и обновить его значение до значения из data_change.json.Например, я хочу использовать jsonPath - $ cars [0] .car_model, проанализировать car_models.json и изменить значение car_model с Mustang для фокусировки.Поэтому мой обновленный файл car_models.json должен выглядеть следующим образом:

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

Как я могу сделать это в Python?

1 Ответ

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

предположим, что ожидаемый ответ должен иметь «фокус», а не «ford»

Это должно дать вам следующее:

import json
import re

with open('cars_model.json') as f:
    cars_model = json.load(f)
with open('data_change.json') as f:
    data_change = json.load(f)

for elements in data_change['request_change_data']:
    element_path = elements['element_path']
    #Reg ex to get you the number (as a string) between the square brackets
    position_match = re.match(r"^.*\[(.*)\].*$", element_path)
    position = int(position_match.group(1))
    print position
    # Split on "period" to get the thing to match
    thing_to_change = element_path.split(".")[1]
    print thing_to_change
    value = elements['element_value']
    print value
    cars_model['cars'][0][thing_to_change] = value

print cars_model
...