0
点赞
收藏
分享

微信扫一扫

python jsonmerge库介绍

seuleyang 2022-06-17 阅读 68

jsonmerge是一个将两个json对象进行合并的python库,在合并的过程中,可以指定合并策略。

官方地址:​​https://pypi.org/project/jsonmerge/​​

github地址:​​https://github.com/avian2/jsonmerge​​

1、安装:

jsonmerge支持python2.7、python3.5

pip install jsonmerge

注:jsonmerge依赖jsonschema库(​​https://pypi.python.org/pypi/jsonschema​​), 该库实现了JSON Schema for python。

2、使用:

1)基本使用:

>>> base = {
... "foo": 1,
... "bar": [ "one" ],
... }

>>> head = {
... "bar": [ "two" ],
... "baz": "Hello, world!"
... }

>>> from pprint import pprint

>>> from jsonmerge import merge
>>> result = merge(base, head)

>>> pprint(result, width=40)
{'bar': ['two'],
'baz': 'Hello, world!',
'foo': 1}

jsonmerge会返回base、head中所有的(并集)字段,对于重复的字段,默认将head中的值覆盖base中的字段值。

在实际中,可以通过​​JSON Schema​​​的方式来设置合并策略。(jsonmerge默认使用JSON Schema的​​Draft 4​​)

2)指定合并侧滤:

>>> schema = {
... "properties": {
... "bar": {
... "mergeStrategy": "append"
... }
... }
... }

>>> from jsonmerge import Merger
>>> merger = Merger(schema)
>>> result = merger.merge(base, head)

>>> pprint(result, width=40)
{'bar': ['one', 'two'],
'baz': 'Hello, world!',
'foo': 1}

更多使用方式见github上的测试用例:​​https://github.com/avian2/jsonmerge/blob/master/tests/test_jsonmerge.py​​

3、常见策略:

  • overwrite:适用于任何类型,用base中的值覆盖head中的值;
  • append:适用于数组类型,将head中数组类型的值append到对应base中;
  • discard:适用于任何类型,即使head包含不同的值,也应将值保留在base中的。默认情况下,如果base不包含任何值(即文档的该部分未定义),则合并后的值将保持未定义状态。可以使用keepIfUndef选项进行更改。如果此选项为true,则在这种情况下将保留head的值。如果您要合并一系列文档并希望保留该系列中首次出现的值,但又想放弃进一步的修改,这将很有用。
举报

相关推荐

0 条评论