1. 程式人生 > >JSON與JsonPATH

JSON與JsonPATH

JSON

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。適用於進行資料互動的場景,比如網站前臺與後臺之間的資料互動。

JSON和XML的比較可謂不相上下。

JSON的結構

JSON有2種結構:物件和陣列
物件:
     物件:物件在js中表示為{ }括起來的內容,資料結構為 { key:value, key:value, ... }的鍵值對的結構,在面向物件的語言中,key為物件的屬性,value為對應的屬性值,所以很容易理解,取值方法為 物件.key 獲取屬性值,這個屬性值的型別可以是數字、字串、陣列、物件這幾種。

陣列:
    陣列:陣列在js中是中括號[ ]括起來的內容,資料結構為 ["Python", "javascript", "C++", ...],取值方式和所有語言中一樣,使用索引獲取,欄位值的型別可以是 數字、字串、陣列、物件幾種。

JSON的方法

load開啟檔案
loads字串
dump
dumps
string串
load傳入檔案,返回值為json格式
loads傳入字串,返回值是json格式


資料來源:
{ "store": {
    "book": [
      { "category": "reference",
        "author": "李白",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "杜甫",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "白居易",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "蘇軾",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

案例:
import json

#開啟一個檔案,進行讀取,將檔案中的資料轉換成json格式
books = json.load(open('./books.txt', mode='r', encoding='utf-8'))

# print(books)
# print(type(books))  #<class 'dict'>

########################################################
with open('./books.txt', mode='r', encoding='utf-8') as fp:
    books1 = fp.read()

books2 = json.loads(books1,encoding='utf-8')
print(books1)
#<class 'str'>,獲取資料不方便,批量獲取得使用正則
print(type(books1))
print(books2)
#<class 'dict'>,獲取資料方便,如下嘗試
print(type(books2))

#獲取李白資料
bookinfo = books2['store']['book']
# print('李白資料:',bookinfo )

for book in bookinfo:
    print(book['author'],book['title'],book['price'])
########################################################
#傳入dict物件,寫入json檔案中,資料型別為json
#注意:原資料中有中文的時候,預設是用asciic編碼的,我們需要用ensure_ascii=False,這樣編碼就變成utf-8了
json.dump(books2,open('./books.json',mode='w',encoding='utf-8'),ensure_ascii=False)

#傳入str物件,寫入json檔案中資料型別還是str
json.dump(books1,open('./books1.json',mode='w',encoding='utf-8'))

########################################################

#dumps方法:將物件轉換成字串
books3 = json.dumps(books2,ensure_ascii=False)

print(books3)
#<class 'str'>
print(type(books3))

總結load、loads、dump、dumps

loads 傳入物件(str),出來是json
dumps 傳入物件(json),出來是str
以上倆個常用

load     傳入一個檔案,返回是json(把檔案中的資料轉換成json)
dump  傳入一個物件(json),一個不存在的json檔案,把物件寫入json檔案中,格式是json
           傳入一個物件(str), 一個不存在的json檔案,把物件寫入json檔案中,  格式是str

JsonPath(解析方式)

JsonPath 是一種資訊抽取類庫,是從JSON文件中抽取指定資訊的工具,提供多種語言實現版本,包括:Javascript, Python, PHP 和 Java。

JsonPath 對於 JSON 來說,相當於 XPATH 對於 XML

簡單版:
 JsonPath解析JSON 格式
 XPATH 解析 HTML/XML格式
 Beautiful Soup  解析 HTML/XML格式

JsonPath與XPath語法對比

在這裡插入圖片描述 在這裡插入圖片描述