2017-04-04 25 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