1

JSON ファイルを読み取って、extract_json 関数でいくつかの値を取得し、それを呼び出してtime_minutes_coords = extract_json("boxes", "time_minutes", "coord")、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

moduleを介して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 に答える