jsonpath解析

2019-06-03

  • jsonpath用來解析json數(shù)據(jù)使用的

python處理json格式用到的函數(shù)

import json 導入庫

  • json.dumps() :將字典或者列表轉(zhuǎn)化為json格式的字符串
    例如如下試驗代碼:
import json

lt=[
    {'name':'王寶強','age':'30'},
    {'name':'賈乃亮','age':'36'},
    {'name':'馬榮榮','age':'33'},
    {'name':'宋吉吉','age':'40'},
    {'name':'李小璐','age':'43'},
    ]

string=json.dumps(lt)

print(string)

顯示json格式字符串為

[{"name": "\u738b\u5b9d\u5f3a", "age": "30"}, {"name": "\u8d3e\u4e43\u4eae", "age": "36"}, {"name": "\u9a6c\u8363\u8363", "age": "33"}, {"name": "\u5b8b\u5409\u5409", "age": "40"}, {"name": "\u674e\u5c0f\u7490", "age": "43"}]
[Finished in 0.2s]
  • json.loads():將json格式字符串轉(zhuǎn)化為python對象
    例如如下代碼:
import json

lt=[
    {'name':'王寶強','age':'30'},
    {'name':'賈乃亮','age':'36'},
    {'name':'馬榮榮','age':'33'},
    {'name':'宋吉吉','age':'40'},
    {'name':'李小璐','age':'43'},
    ]

string=json.dumps(lt)
# print(string)
obj=json.loads(string)
print(type(obj))

顯示對象為list,如下,顯示內(nèi)容實際為lt

<class 'list'>
[Finished in 0.2s]
  • json.dump():將字典或者列表轉(zhuǎn)化為json格式的字符串并且寫入到文件中
    例如如下代碼:
import json

lt=[
    {'name':'王寶強','age':'30'},
    {'name':'賈乃亮','age':'36'},
    {'name':'馬榮榮','age':'33'},
    {'name':'宋吉吉','age':'40'},
    {'name':'李小璐','age':'43'},
    ]

# string=json.dumps(lt)
# print(string)
# obj=json.loads(string)
# print(type(obj))
json.dump(lt,open('json.txt','w',encoding='utf8'

運行后會在本地生成一個json.txt文件


json.txt文件內(nèi)容為:


  • json.load():從文件中讀取json格式字符串,轉(zhuǎn)化為python對象
    例如如下代碼:
import json

lt=[
    {'name':'王寶強','age':'30'},
    {'name':'賈乃亮','age':'36'},
    {'name':'馬榮榮','age':'33'},
    {'name':'宋吉吉','age':'40'},
    {'name':'李小璐','age':'43'},
    ]

# string=json.dumps(lt)
# print(string)
# obj=json.loads(string)
# print(type(obj))
# json.dump(lt,open('json.txt','w',encoding='utf8'))
obj=json.load(open('json.txt','r',encoding='utf8'))
print(type(obj))

顯示為list對象,實際為lt列表如下:

<class 'list'>
[Finished in 0.2s]

以上方式均為python處理方式

前端處理方式(了解下即可)

將json格式字符串轉(zhuǎn)化為js對象

jsonpath 和 xpath 區(qū)別:

xpath索引下標是從1開始的
jsonpath索引下標是從0開始

本地book.json文件數(shù)據(jù)案例:

{ "store": {
    "book": [ 
      { "category": "文學",
        "author": "路遙",
        "title": "平凡的世界",
        "price": 18.95
      },
      { "category": "文學",
        "author": "席慕容",
        "title": "穆斯林的葬禮",
        "price": 12.99
      },
      { "category": "歷史",
        "author": "二月河",
        "title": "康熙大帝",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "言情",
        "author": "瓊瑤",
        "title": "還珠格格",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

方法案例使用:

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
print(obj)

顯示所有book.json內(nèi)容,將其轉(zhuǎn)化為obj對象

{'store': {'book': [{'category': '文學', 'author': '路遙', 'title': '平凡的世界', 'price': 18.95}, {'category': '文學', 'author': '席慕容', 'title': '穆斯林的葬禮', 'price': 12.99}, {'category': '歷史', 'author': '二月河', 'title': '康熙大帝', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': '言情', 'author': '瓊瑤', 'title': '還珠格格', 'isbn': '0-395-19395-8', 'price': 22.99}], 'bicycle': {'color': 'red', 'price': 19.95}}}
[Finished in 0.1s]

查找book下面所有的author

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
# print(obj)
#寫【0】代表查詢第一本書的作者
ret=jsonpath.jsonpath(obj,'$.store.book[*].author')
print(ret)

顯示:

['路遙', '席慕容', '二月河', '瓊瑤']
[Finished in 0.1s]

找到所有author

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
#找到所有author
ret=jsonpath.jsonpath(obj,'$..author')
print(ret)

顯示:

['路遙', '席慕容', '二月河', '瓊瑤']
[Finished in 0.1s]

查找store下面所有節(jié)點

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
#查找store下面所有節(jié)點
ret=jsonpath.jsonpath(obj,'$.store.*')
print(ret)

顯示:

[[{'category': '文學', 'author': '路遙', 'title': '平凡的世界', 'price': 18.95}, {'category': '文學', 'author': '席慕容', 'title': '穆斯林的葬禮', 'price': 12.99}, {'category': '歷史', 'author': '二月河', 'title': '康熙大帝', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': '言情', 'author': '瓊瑤', 'title': '還珠格格', 'isbn': '0-395-19395-8', 'price': 22.99}], {'color': 'red', 'price': 19.95}]
[Finished in 0.1s]

store里面所有東西的price

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
#store里面所有東西的price
ret=jsonpath.jsonpath(obj,'$.store..price')
print(ret)

顯示:

[18.95, 12.99, 8.99, 22.99, 19.95]
[Finished in 0.1s]

book下面第三個book,返回的是一個列表

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))

# book下面第三個book,返回的是一個列表
ret=jsonpath.jsonpath(obj,'$..book[2]')
print(ret)

顯示:

[{'category': '歷史', 'author': '二月河', 'title': '康熙大帝', 'isbn': '0-553-21311-3', 'price': 8.99}]
[Finished in 0.1s]

book下面最后個book,返回的是一個列表

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))

# book下面最后個book,返回的是一個列表
ret=jsonpath.jsonpath(obj,'$..book[(@.length-1)]')
print(ret)

顯示:

[{'category': '言情', 'author': '瓊瑤', 'title': '還珠格格', 'isbn': '0-395-19395-8', 'price': 22.99}]
[Finished in 0.1s]

book下面前兩本書

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
#book下面前兩本書
ret=jsonpath.jsonpath(obj,'$..book[0,1]')
#用切片也可以
# ret=jsonpath.jsonpath(obj,'$..book[:2]')
print(ret)

顯示:

[{'category': '文學', 'author': '路遙', 'title': '平凡的世界', 'price': 18.95}, {'category': '文學', 'author': '席慕容', 'title': '穆斯林的葬禮', 'price': 12.99}]
[Finished in 0.1s]

查找所有的包含isbn這個鍵的所有book

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
#查找所有的包含isbn這個鍵的所有book
ret=jsonpath.jsonpath(obj,'$..book[?(@.isbn)]')

print(ret)

顯示:

[{'category': '歷史', 'author': '二月河', 'title': '康熙大帝', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': '言情', 'author': '瓊瑤', 'title': '還珠格格', 'isbn': '0-395-19395-8', 'price': 22.99}]
[Finished in 0.1s]

查找價格低于10的所有書

import jsonpath
import json
#將json格式字符串轉(zhuǎn)化為python對象
obj=json.load(open('book.json','r',encoding='utf8'))
#查找價格低于10的所有書
# ret=jsonpath.jsonpath(obj,'$..book[?(@.price<10)]')
print(ret)

顯示:

[{'category': '歷史', 'author': '二月河', 'title': '康熙大帝', 'isbn': '0-553-21311-3', 'price': 8.99}]
[Finished in 0.1s]

以上主要學習將json格式字符串轉(zhuǎn)化為python對象,然后使用對應方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容