2017-04-04 109 views
1

这可能是一个新手问题。函数读取json数据和json路径返回元组或列表

但我想创建一个函数(或找到一个库)返回一个元组或列表,当我传递一个json数据和jsonPath到它;是这样的:

Tup1 = Extract(json_data,json_path) 
List1 = Extract(json_data,json_path) 

所以基本上转弯是这样的:

{ 
    "name"="john", 
    "age"=25 
} 

Tup1 = ('john',25) 

OR

List1 = ['john',25] 

有没有办法用最少的做到这一点编码?

+0

什么是json的路径延伸呢?你以后要保存它吗? – abccd

+0

并且相同的函数不会因为您更改变量名称而返回两种不同的类型 – abccd

+0

@abccd答案: 1-我根据我所了解的json_data模式创建json_path字符串,我可以稍后更改模式更改 2-我不需要返回这两种类型,其中一个对我有效 – Zac

回答

0

jsonpath包是我采用使用其jsonpath地址,以提取一个元素,并创建获取JSON数据和jsonpath元素的列表的功能的小库,并从JSON数据作为返回对应的值的每个元素元组:

很明显,你可以根据自己的要求

from jsonpath import jsonpath 

def json2tuple(json_data,jsonpaths_list): 
    return_data = [] 

    for path in jsonpaths_list : 
     return_data.append(jsonpath(json_data,path)[0]) 

    return(tuple(return_data)) 
1

你可以做的是,你可以使用简单的列表理解将所有的值在json数据解析后加入列表中。要处理解析,只需使用json.load加载文件或json.loads即可从字符串加载。

这将返回一个列表:

import json 
def Extract(json_data,json_path): 
    json_data = json.load(json_path) # parse the data from json_path, if it's already parsed, skip this line 
    return [val for val in json_data.values()] # add tuple() around it if you want tuple instead 

List1 = Extract(json_data,json_path) 
+0

我要试试这个,谢谢 – Zac

1

{ "name"="john", "age"=25 }

不是一个JSON数据的正确的语法,你需要:

{ "name":"john", "age":25 }

一个更换=的方法是:

import json 

#assuming json_data contains valid data 
def Extract(json_data, json_path, format="list"): 
    try: 
     data = json.loads(json_data) 
     if format == "list": 
      reutrn data.values() 
     elif format == "tuple": 
      reutrn tuple(data.values()) 
    except ValueError as e: 
     print "error in parsing json_data", e 

#assuming json_path contains valid data  
def Extract(json_data, json_path, format="list"): 
    try: 
     data = json.load(json_path) 
     if format == "list": 
      reutrn data.values() 
     elif format == "tuple": 
      reutrn tuple(data.values()) 
    except ValueError as e: 
     print "error in parsing json_data", e  
    except IOError as e: 
     print "error in opening json_path", e