我如何在python中使用jsonpath更改json对象中的元素值

时间:2018-09-10 22:59:58

标签: python json jsonpath

我有以下json对象(说car_details.json):

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

我想通过python代码将car_model的值从cx-5更改为cx-9。 我通过外部文件提供了此元素的json路径。 json-path表达式基本上表示为字符串。像这样: “汽车[2] .car_model” 并且新值也通过外部文件作为字符串提供: 'cx-9'

现在我该如何使用jsonpath表达式通过car_details.json进行解析,并将其值更改为以字符串形式提供的值,最后返回修改后的json对象

P.S我想通过python代码做到这一点

1 个答案:

答案 0 :(得分:0)

这是不使用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)