1. 程式人生 > >JSON解析-python實現

JSON解析-python實現

本文從以下幾個方面進行討論:
1. JSON的基本概念
2. python解析JSON
3. 參考

1. JSON基本概念

1.1 JSON概念及特點

  • JSON 指的是 JavaScript 物件表示法(JavaScript Object Notation)
  • JSON 是輕量級的文字資料交換格式
  • JSON 獨立於語言,JSON 使用 JavaScript 語法來描述資料物件,但是 JSON 仍然獨立於語言和平臺。JSON 解析器和 JSON 庫支援許多不同的程式語言。
  • JSON 具有自我描述性,更易理解

JSON 比 XML 更小、更快,更易解析。具體的JSON和XML的比較,可以參考部落格:

JSON與XML的區別比較

1.2 JSON語法規則

JSON 語法是 JavaScript 物件表示法語法的子集。

  • 資料在名稱/值對中
  • 資料由逗號分隔
  • 花括號儲存物件
  • 方括號儲存陣列

JSON的資料儲存在 名稱/值 對中。
名稱/值對包括欄位名稱(在雙引號中),後面寫一個冒號,然後是值,例如:

“Name” : “SunPro”

JSON的值的型別有:

  • 數字(整數或浮點數)
  • 字串(在雙引號中)
  • 邏輯值(true 或 false)
  • 陣列(在方括號中)
  • 物件(在花括號中)
  • null

看一個JSON和XML的示例:
表示中國部分省市資料如下

{
    "name": "中國",
    "province": [{
        "name": "黑龍江",
        "cities": {
            "city": ["哈爾濱", "大慶"]
        }
    }, {
        "name": "廣東",
        "cities": {
            "city": ["廣州", "深圳", "珠海"]
        }
    }, {
        "name": "臺灣",
        "cities": {
            "city": ["臺北"
, "高雄"]
}
}, { "name": "新疆", "cities": { "city": ["烏魯木齊"] } }]
}

對應的XML檔案

<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中國</name>
    <province>
        <name>黑龍江</name>
        <cities>
            <city>哈爾濱</city>
            <city>大慶</city>
        </cities>
    </province>
    <province>
        <name>廣東</name>
        <cities>
            <city>廣州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>臺灣</name>
        <cities>
            <city>臺北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>烏魯木齊</city>
        </cities>
    </province>
</country>

可以看到,JSON 簡單的語法格式和清晰的層次結構明顯要比 XML 容易閱讀,並且在資料交換方面,由於 JSON 所使用的字元要比 XML 少得多,可以大大得節約傳輸資料所佔用得頻寬。

2. python 解析JSON

python通過json庫來解析JSON
使用 JSON 函式需要匯入 json 庫:import json。

2.1 json函式

函式 描述
json.dumps() 將 Python 物件編碼成 JSON 字串
json.loads() 將已編碼的 JSON 字串解碼為 Python 物件

2.2 python和JSON解析過程中的對應關係

Decoding:

JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

Encoding:

Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True true
False false
None null

看一下例項:

import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
jsonstr = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': ')) #格式化輸出
print(jsonstr)
print(type(jsonstr))
jsonDe = json.loads(jsonstr)
print(jsonDe)
print(type(jsonDe))

json解析也可以使用python json模組封裝的json.JSONDecoder 和 json.JSONEncoder 類
詳見 https://docs.python.org/3.5/library/json.html
也可以使用第三方庫:Demjson
Demjson 是 python 的第三方模組庫,可用於編碼和解碼 JSON 資料,包含了 JSONLint 的格式化及校驗功能。
Github 地址:https://github.com/dmeranda/demjson
官方地址:http://deron.meranda.us/python/demjson/

Reference

  1. 百度百科-JSON
  2. W3Schol-JSON 教程
  3. 3.