python解析json字串

2021-08-04 10:43:54 字數 4505 閱讀 5360

#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...