代码改变世界

输入一个json输入一个jsonpath

2017-08-08 10:01  大手掌  阅读(337)  评论(0编辑  收藏  举报
class data_to_jsonpath():
def __init__(self):
self.templist=[]
def data_handle(self,data, jsonpath): # 第一次调用这个函数的时候,jsonpath 设为 $. 或$

if isinstance(data, dict): #判断数据类型,如果是字典类型执行这个
for key in data:
if isinstance(data[key], str) or isinstance(data[key], int) or data[key]==None or data[key]=='' or data[key]==False:
jsonpath1 = jsonpath + key
self.templist.append(jsonpath1)
if key != "jsonpath":
pass
# print(jsonpath1) # 这是本次调用该函数可以直接计算出来jsonpath。 这个地方只输出,也可以写到一起txt中

elif isinstance(data[key], dict):
jsonpath1 = jsonpath + key + '.'
self.templist.append(jsonpath1)
self.data_handle(data[key],jsonpath1)
elif isinstance(data[key], list):
jsonpath1 = jsonpath + key
self.templist.append(jsonpath1)
self.data_handle(data[key], jsonpath1)
elif isinstance(data, list): # 第一次jsonpath为 $
for each in data:
if isinstance(each, dict):
jsonpath1 = jsonpath + '[' + str(data.index(each)) + ']' + '.'
self.templist.append(jsonpath1)
self.data_handle(each, jsonpath1)
elif isinstance(each, list):
jsonpath1 = jsonpath + "[" + str(data.index(each)) + "]"
self.templist.append(jsonpath1)
self.data_handle(each, jsonpath1)
elif isinstance(each, str) or isinstance(each, int):
jsonpath1 = jsonpath + '[' + str(data.index(each)) + ']'
self.templist.append(jsonpath1)
if each != "jsonpath":
pass
# print(jsonpath1)
return self.templist



if __name__=="__main__":
data=[{"a":1,"b":2}]
d=data_to_jsonpath()
k=d.data_handle(data,"$")
print(k)