如何通过长路径更新json中的值?

时间:2019-08-12 12:19:17

标签: python json path

我找不到有关如何更新具有不同深度的复杂路径的原始JSON消息值的任何信息。

我尝试了jsonpath库,但这是有关获取值而不是设置值的文档。

例如,我具有以下JSON:

{"very":{"long":{"path":{"A":"1"}}},"other":{"path":{"even":{"deeper":{"B":"2"}}}}}

可以在函数外部指定两个路径。 这一个映射到"1"

very.long.path.A

然后将其发送到"2"

other.path.even.deeper.B

jsonpath可以从提供的路径中提取值,但是我的目标是修改它们。

可以做到以下几点的理想选择:

old_json = '{"very":{"long":{"path":{"A":"1"}}},"other":{"path":{"even":{"deeper":{"B":"2"}}}}}'
path = "other.path.even.deeper.B"
value = "100500"
new_json = jsonparser.update_value(old_json, path, value)

有没有可以提供此类功能的库?

1 个答案:

答案 0 :(得分:0)

阅读

要解码json,您可以使用内置的json库。这是非常容易使用。它将json数据转换为有效的python对象。 See Encoders and decoders

对于您而言,这主要是一个命令。要访问字典中的元素,请参见python dictionaries

更新

现在,您需要将路径拆分为单独的键keys = path.split(".")并迭代到最后一个。

element = json_decoded_root
for key in keys[:-1]:
    element = element.setdefault(key, {})
element[keys[-1]] = new_value

回写

json.dump(file, data) # Writing to file

new_json = json.dumps(data) # Writing in string

额外:为什么您不会丢失数据

我不知道我是否理解您,但是此示例说明了为什么更改字典中的值时不丢失数据。

>>> example = {"A" : 20, "B": 10}
>>> example["A"] = 30
>>> example
{'A': 30, 'B': 10}

您可以在丢失数据时“丢失”数据。例如

>>> example = {"A" : {"C": 10}, "B": 10}
>>> example["A"] = 30
>>> example
{'A': 30, 'B': 10}

在这里“丢失”了包含“ C”键的字典