Json與JsonPath

來源:互聯網
上載者:User

標籤:表示   read   本地   轉碼   lis   可謂   字串   key   sts   

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,因為它良好的可讀性與易於機器進行解析和產生等特性,在當前的資料整理和收集中得到了廣泛的應用。

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

Python 2.X中內建了JSON模組,直接import json就可以使用了。

官方文檔:http://docs.python.org/library/json.html

Json線上解析網站:http://www.json.cn

JSON
json簡單來說就是JavaScript中的對象和數組,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種複雜的結構。

對象:對象在js中表示為{ }括起來的內容,資料結構為{key1: value1, key2:value2, ...}的索引值對的結構,在物件導向的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 擷取屬性值,這個屬性值的類型可以是數字、字串、數組、對象。
數組:數組在js中是[ ]括起來的內容,資料結構為[‘Python‘, ‘JavaScript‘, ‘C++‘, ...],取值方式和所有語言一樣,使用索引擷取,欄位值的類型可以是數字、字串、數組、對象。
json模組

json模組提供了四個功能:dumps、dump、loads、load,用於字串和Python資料類型間進行轉換。

1.json.dumps()

實現Python類型轉化為Json字串,返回一個str對象,從Python到Json的類型轉換對照如下:

# -*- conding:utf-8 -*-
import json

listStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr = {"city": "北京", "name": "螞蟻"}

print(json.dumps(listStr))
# [1, 2, 3, 4]

print(type(json.dumps(listStr)))
# <class ‘str‘>

print(json.dumps(tupleStr))
# [1, 2, 3, 4]

print(type(json.dumps(tupleStr)))
# <class ‘str‘>

# 注意:json.dumps() 序列化時預設使用的ascii編碼
# 添加參數 ensure_ascii=False 禁用ascii編碼,按utf-8編碼
print(json.dumps(dictStr, ensure_ascii = False))
# {"city": "北京", "name": "螞蟻"}

print(type(json.dumps(dictStr, ensure_ascii = False)))
# <class ‘str‘>
2.json.dump()

將Python內建類型序列化為Json對象後寫入檔案

# -*- conding:utf-8 -*-
import json

listStr = [{"city": "北京"}, {"name": "螞蟻"}]
json.dump(listStr, open("listStr.json", "w", encoding = "utf-8"), ensure_ascii = False)

dictStr = {"city": "北京", "name": "螞蟻"}
json.dump(dictStr, open("dictStr.json", "w", encoding = "utf-8"), ensure_ascii = False)
3.json.loads()

把Json格式字串解碼轉換成Python對象,從Json到Python的類型轉換對照如下:

# -*- conding:utf-8 -*-
import json

strList = ‘[1, 2, 3, 4]‘

strDict = ‘{"city": "北京", "name": "螞蟻"}‘

print(json.loads(strList))
# [1, 2, 3, 4]

# json資料自動按utf-8儲存
print(json.loads(strDict))
# {‘city‘: ‘北京‘, ‘name‘: ‘螞蟻‘}
4.json.load()

讀取檔案中Json形式的字串,轉換成Python類型

# -*- conding:utf-8 -*-
import json

strList = json.load(open("listStr.json", "r", encoding = "utf-8"))
print(strList)
# [{‘city‘: ‘北京‘}, {‘name‘: ‘螞蟻‘}]

strDict = json.load(open("dictStr.json", "r", encoding = "utf-8"))
print(strDict)
# {‘city‘: ‘北京‘, ‘name‘: ‘螞蟻‘}
JsonPath
JsonPath是一種資訊抽取類庫,是從JSON文檔中抽取指定資訊的工具,提供多種語言實現版本,包括:JavaScript、Python、PHP和Java。

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

:https://pypi.python.org/pypi/jsonpath
安裝方法:下載後解壓之後執行 python setup.py install
官方文檔:http://goessner.net/articles/JsonPath
JsonPath與XPath文法對比:

JsonPath結構清晰,可讀性高,複雜度低,非常容易匹配,下表中對應了XPath的用法。

樣本:

以拉勾網城市JSON檔案:http://www.lagou.com/lbs/getAllCitySearchLabels.json 為例,擷取所有的城市名稱。

# -*- conding:utf-8 -*-
import urllib.request
import json
import jsonpath

# 拉勾網城市JSON檔案
url = ‘http://www.lagou.com/lbs/getAllCitySearchLabels.json‘
# User-Agent頭
header = {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36‘}

# url 連同 headers,一起構造Request請求,這個請求將附帶 chrome 瀏覽器的User-Agent
request = urllib.request.Request(url, headers = header)

# 向伺服器發送這個請求
response = urllib.request.urlopen(request)

# 擷取頁面內容:bytes
html = response.read()

# 轉碼:bytes轉str
html = html.decode("utf-8")

# 把json格式字串轉換成python對象
obj = json.loads(html)

# 從根節點開始,匹配name節點
city_list = jsonpath.jsonpath(obj, ‘$..name‘)

# 列印擷取的name節點
print(city_list)
# 列印其類型
print(type(city_list))

# 寫入本地磁碟檔案
with open("city.json", "w", encoding = "utf-8") as f:
content = json.dumps(city_list, ensure_ascii = False)
f.write(content)

Json與JsonPath

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.