2017-01-17 4 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