2017-01-17 2 views
0

検索結果からjsonパスがあります。私はどのように特定のパスに書き込むのだろうかと思っていますか?私はこれらに取り掛かるにはどうすればよいこれらPython - JsonPathは検索されたパスに値を挿入します

{'foo':{ 'cd': {'baz': 1, 'baz2': 2}, 'cd2': {'baz': 2, 'baz2': 2}}} 

のような深い葉にドキュメントを挿入するこれらの結果のそれぞれについて

doc = {'foo':{ 'cd': {'baz': 1}, 'cd2': {'baz': 2}}} 
expression = "foo.*.baz" 
jsonpath_expr = parse(expression) 
values = [str(match.full_path) for match in jsonpath_expr.find(doc)] 
>> [foo.cd.baz, foo.cd2.baz] 

?私は、jsonパスを与えられた文書に値を書き込むソースを見つけることはできません。お手伝いありがとう。

答えて

0

これが私のやり方です。

def string_to_json(self, source): 
     try: 
     load_input_json = json.loads(source) 
     except ValueError, e: 
     raise Exception("Could not parse '%s' as JSON: %s" % (source, e)) 
     return load_input_json 

    def _json_path_search(self, json, expr): 
    path = parse(expr) 
    return path.find(json) 

    def update_json(self, doc, matches, name, value, index=0, parent=False): 
    load_input_json = doc 
    # matches = self._json_path_search(load_input_json, expr) 
    datum_object = matches[int(index)] 
    if not isinstance(datum_object, jsonpath.DatumInContext): 
     raise Exception("Nothing found by the given json-path") 
    path = datum_object.path 
    if isinstance(path, jsonpath.Index): 
     # datum_object.context.value[datum_object.path.index] = value 
     datum_object.context.value[name] = value 
    elif isinstance(path, jsonpath.Fields): 
     # datum_object.context.value[datum_object.path.fields[0]] = value 
     datum_object.context.value[name] = value 
    return load_input_json 
関連する問題