如何使用JMESPath将两个数组(`keys`和`values`)组合成一个对象?

时间:2015-08-09 03:23:56

标签: jmespath

我有一个带有两个数组的JSON对象 - 一个keys数组和一个values数组,两者长度相同。使用jmespath,我想构建一个新对象,使用keys数组的值作为键,values数组的值作为值,如PHP中的array_combine

例如,这里是输入:

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

以下是我期待的输出:

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

有没有内置功能来实现这个目标?

2 个答案:

答案 0 :(得分:2)

不幸的是,看来这还不可能。

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

您将需要zipfrom_items函数,这些函数针对规范in this github pull request提出了(!)

答案 1 :(得分:0)

jmespath 是用于解析/查询JSON文件的流行库。 http://jmespath.org/tutorial.html

的更多示例

在下面的代码中

  • js是提供的json内容
  • jp.search(' keys',json.loads(js))生成列表: [u' a',u' b',u& #39; C&#39]
  • 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&#39; a&#39;:1,u&#39; c&#39;:3,u&#39; b&#39;:2} < /强>