1

我正在读取一个 JSON 文件以使用我的 extract_json 函数检索一些值并调用它,time_minutes_coords = extract_json("boxes", "time_minutes", "coord")这为我提供了通往我的坐标值的正确路径。

  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 文件中的正确值?

4

1 回答 1

0

您可以通过模块使用JSONPath解决它。工作样本:jsonpath-rw

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)。然后,将键与 a 连接dot以构建到所需节点的路径。

于 2016-03-12T14:52:55.643 回答