#coding=utf-8
import json
from pprint import *
from jsonpath_rw import jsonpath, parse
#import ******json
#import demjson
try:
import xml.etree.celementtree as et
except importerror:
import xml.etree.elementtree as et
json_content = """
, "d": [,
], "result": ,
"d": [,
] }}"""
json_relation = """
"""doctor_content = """
, ]}
},,]}
}]}}}
"""doctor_relation = """
"""def parsejson(request):
jsonobj = jsonobject()
return jsonobj.enparsejson(request)
class jsonobject:
'json操作類 2017-08-01/yx'
#入參校驗
def __checkrequest(self, request):
if 'strcontent' not in request.keys():
raise baseexception('strcontent field is not find')
if 'strparseitemflag' not in request.keys():
raise baseexception('strparseitemflag field is not find')
#獲取對映關係
def __getrelation(self, relation):
dict = {}
try:
items = et.fromstring(relation)
except baseexception as e:
return none
for item in items.findall('item'):
infname = item.get('inte***cename')
tagname = item.get('tagname')
if infname and tagname:
dict[infname] = tagname
return dict if dict else none
#獲取給定字典給定key的值,多層節點用'/'分隔: root/child1/child2
def __getchilddict(self, text, tagflag):
childtext = text
taglist = tagflag.split("/")
for i in range(len(taglist)):
childparam = taglist[i]
if isinstance(childtext, dict):
for (k, v) in childtext.items():
if childparam.lower() == str(k).lower():
childtext = v
break
return childtext
def __getjsonpathlist(self, text, jsonpath):
jsonpath_expr = parse(jsonpath)
recordlist = [match.value for match in jsonpath_expr.find(text)]
return recordlist
#組合輸出集合
def __groupresponse(self, dict_rel, dict_record, list_response):
item = {}
for (k, v) in dict_rel.items():
value = ''
for (m, n) in dict_record.items():
if str(v).lower() == str(m).lower():
value = str(n)
break
if value != '':
item[k] = value
if item:
#解析json字串
def enparsejson(self, request):
self.__checkrequest(request)
scontent = request['strcontent']
sparseitemflag = request['strparseitemflag']
response =
if dict_rel is none:
try:
text = json.loads(scontent)
#text = ******json.loads(content)
#text = demjson.decode(content)
except baseexception as e:
raise baseexception(e.message)
if sparseitemflag == "":
if isinstance(text, dict):
self.__groupresponse(dict_rel, text, response)
return response
#result = self.__getchilddict(text, sparseitemflag)
result = self.__getjsonpathlist(text, sparseitemflag)
if isinstance(result, list):
for i in result:
record = i
if isinstance(record, dict):
self.__groupresponse(dict_rel, record, response)
elif isinstance(result, dict):
self.__groupresponse(dict_rel, result, response)
return response
"""###########解析json函式入參說明###########
strcontent: 待解析的json字串
strparseitemflag: 待解析的主節點標識
"""if __name__ == "__main__":
try:
request = {}
request['strcontent'] = json_content
request['strparseitemflag'] = '$'
print("1:root")
pprint(parsejson(request))
request['strparseitemflag'] = '$.c'
print("\n2:c")
pprint(parsejson(request))
request['strparseitemflag'] = '$.d[*]'
print("\n3:d")
pprint(parsejson(request))
request['strparseitemflag'] = '$.result'
print("\n4:result")
pprint(parsejson(request))
request['strparseitemflag'] = '$.result.c'
print("\n5:result/c")
pprint(parsejson(request))
request['strparseitemflag'] = '$.result.d[*]'
print("\n6:result/d")
pprint(parsejson(request))
request['strcontent'] = doctor_content
request['strparseitemflag'] = '$.response.list.item[*].list1.item1[*]'
print("\n6:doctor")
pprint(parsejson(request))
except baseexception as e:
print(e.message)
JSON字串解析
一 json物件 js可以按以下方式定義物件 varobj 這樣就定義了物件 obj,它有兩個公共屬性id和name,可以用 obj.id 的方式直接訪問其屬性值。從伺服器獲取資料時往往不止乙個物件,這就需要用到物件陣列,js中物件陣列可以用 來定義,如下 varobjs alert objs 0 ...
json字串解析
有時儲存在資料庫的資料是一串json字串,需要進行讀取的時候就需要解析操作。簡單介紹兩種 1 net.sf.json.2 com.alibaba.fastjson.第一種使用方式 import net.sf.json.jsonarray import net.sf.json.jsonexceptio...
JSON字串解析
有時儲存在資料庫的資料是一串json字串,需要進行讀取的時候就需要解析操作。簡單介紹兩種 1 net.sf.json.2 com.alibaba.fastjson.第一種使用方式 import net.sf.json.jsonarray import net.sf.json.jsonexceptio...