2015-08-09 2 views
4

У меня есть объект JSON с двумя массивами. Используя jmespath, я хочу построить новый объект, используя один массив в качестве ключей, а другой - как значения. Подобно array_combine в PHP.Как объединить два массива в ключи и значения с помощью Jmespath

Например, вот вход:

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

А вот выход я ожидал:

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

Есть ли встроенные функции для достижения этой цели?

ответ

-2

jmespath - популярная библиотека для разбора/запроса файлов JSON. Другие примеры в http://jmespath.org/tutorial.html

В коде ниже

  • JS является предоставленному содержании JSon
  • jp.search ('ключи', json.loads (JS)) производит список: [u'a 'u'b', u'c ']
  • jp.search (' ценность, json.loads (JS)) производит список: [1, 2, 3]
  • почтовых комбинат х годов два списка и 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}

+2

Пожалуйста, обратите внимание, добавив некоторые формулировки, чтобы объяснить, что вы сделали с кодом. –

+0

Несомненно, добавлено больше деталей. –

+2

@Sai, я ценю усилия, но я искал решение, которое использовало только jmespath, и ваше решение использует Python для zip двух массивов. Причина того, что я хочу использовать метод jmespath, - это то, что я хочу создать API, в котором пользователи предоставляют сценарий jmespath для изменения ответа JSON по своему вкусу без ущерба для сервера путем выполнения произвольного кода Python. – jagwar3

 Смежные вопросы

  • Нет связанных вопросов^_^