2016-03-12 8 views
1

Я читаю файл JSON для извлечения некоторых значений с помощью функции extract_json и вызова его по time_minutes_coords = extract_json("boxes", "time_minutes", "coord"), который дает мне правильный путь к моему значению координаты.Функция Python для чтения файла JSON и получения правильного значения

def extract_json(one,two,three): 
    with open('document.json') as data_file: 
     data = json.load(data_file) 
     return data[one][two][three] 

Но это просто работает для 3-х аргументов. Что делать, если я хотел бы использовать эту функцию для любого количества переданных аргументов? Я хотел бы иметь что-то вроде:

def extract_json(*args): 
    with open('document.json') as data_file: 
     data = json.load(data_file) 
     return data[args] 

но все арг отображаются таким образом:

(args1, args2, args3, args4)

и data(args1, args2, args3, args4) возвращает ничего , Как я могу иметь что-то вроде:

данные [args1] [args2] [args3] [args4]

для перехода на правильное значение в файле JSON?

ответ

0

Вы можете решить это с помощью JSONPath через jsonpath-rw module. Работа образца:

from jsonpath_rw import parse 

obj = { 
    "glossary": { 
     "title": "example glossary", 
     "GlossDiv": { 
      "title": "S", 
      "GlossList": { 
       "GlossEntry": { 
        "ID": "SGML", 
        "SortAs": "SGML", 
        "GlossTerm": "Standard Generalized Markup Language", 
        "Acronym": "SGML", 
        "Abbrev": "ISO 8879:1986", 
        "GlossDef": { 
         "para": "A meta-markup language, used to create markup languages such as DocBook.", 
         "GlossSeeAlso": ["GML", "XML"] 
        }, 
        "GlossSee": "markup" 
       } 
      } 
     } 
    } 
} 

keys = ["glossary", "GlossDiv", "GlossList", "GlossEntry", "GlossDef", "para"] 
jsonpath_expr = parse(".".join(keys)) 
print(jsonpath_expr.find(obj)[0].value) 

Печать:

A meta-markup language, used to create markup languages such as DocBook. 

Здесь ключи приходят в виде списка (в вашем случае это args). Затем ключи соединяются с dot, чтобы построить путь к нужному узлу.

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

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