如何用Python从JSON Path生成JSON对象?求通用实现方案
问题
我有一组JSON Path及其对应的值,例如bla.[0].ble对应值3,期望生成的JSON对象如下所示:
{ "bla": [ { "ble": 3 } ] }
之前我用jsonpath-ng库解析JSON中的路径,现在需要反向操作——从JSON Path构建JSON对象。请问怎么实现支持所有JSON Path的通用生成器?或者有没有合适的开源库可用?
解决方案
一、开源库推荐
直接用现成的库能省不少事,Python生态下有两个合适的工具:
- jsonpath-rw-ext:作为jsonpath-rw的扩展,它既能用
parse方法解析JSON Path,还提供update接口可以直接往空对象里按路径写入值,能覆盖数组索引、属性访问等大部分常见JSON Path语法。 - pydash:这个库的
set_方法支持用类似JSON Path的语法设置嵌套结构的值,比如执行pydash.set_({}, 'bla.[0].ble', 3)就能直接生成你需要的JSON对象,用法相当简洁。
二、手动实现思路(不依赖第三方库)
如果想自己实现通用生成器,核心是拆分JSON Path节点,逐步构建嵌套结构:
- 拆分路径节点:把JSON Path按
.和[]拆分,比如bla.[0].ble拆成['bla', '0', 'ble'],注意区分普通属性名和数组索引。 - 迭代构建结构:从空对象开始,逐个处理每个节点:
- 若当前节点是数组索引(如
0),则创建数组,若索引超出当前数组长度,要补空占位确保位置存在。 - 若当前节点是属性名,则创建对象的键值对。
- 每处理完一个节点,就把操作上下文切换到新创建的结构中,继续处理下一个节点,直到最后一个节点时赋值对应的值。
- 若当前节点是数组索引(如
- 处理特殊语法:如果要支持通配符
*、切片[1:3]这类复杂语法,需要额外判断逻辑:通配符要给所有数组元素或对象属性赋值;切片要给对应范围的数组元素赋值,这部分逻辑相对繁琐,可根据实际需求逐步实现。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

