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 教程