9

我有一个带有两个数组的 JSON 对象——一个keys数组和一个values数组,两者的长度相同。使用 jmespath,我想使用keys数组的值作为键和values数组的值作为值来构造一个新对象,就像array_combine在 PHP 中一样。

例如,这是输入:

{
    "keys": [
        "a",
        "b",
        "c"
    ],
    "values": [
        1,
        2,
        3
    ]
}

这是我期待的输出:

{
    "a": 1,
    "b": 2,
    "c": 3
}

是否有任何内置功能可以实现这一点?

4

2 回答 2

4

不幸的是,这似乎还不可能。

Github 问题:jmespath.py#152 —(位于 Python 实现的 repo 中

您将需要zipandfrom_items函数,建议(!)用于此 github 拉取请求中的规范。

于 2018-08-25T11:21:47.693 回答
-1

jmespath是解析​​/查询 JSON 文件的流行库。更多示例在http://jmespath.org/tutorial.html

在下面的代码中

  • js 是提供的 json 内容
  • jp.search('keys',json.loads(js)) 生成列表:[u'a', u'b', u'c']
  • jp.search('values',json.loads(js)) 生成列表:[1, 2, 3]
  • zip结合了两个列表,dict()将元组转换为字典

    import json
    import jmespath
    
    js = '''{
            "keys": [
                    "a",
                    "b",
                    "c"
                    ],
            "values": [
                    1,
                    2,
                    3
                      ]
            }'''
    
    print (dict(zip(jp.search('keys',json.loads(js)),jp.search('values',json.loads(js)))))
    

    输出:{u'a': 1, u'c': 3, u'b': 2}

于 2016-04-20T21:30:50.150 回答