1. 程式人生 > >Python解析json資料結構範例

Python解析json資料結構範例

from:http://bkeep.blog.163.com/blog/static/12341429020113156582685/

一、JSON的格式:

1,物件:

{name:"Peggy",email:"[email protected]",homepage:"http://www.peggy.com"}

{ 屬性 : 值 , 屬性 : 值 , 屬性 : 值 }

2,陣列是有順序的值的集合。一個數組開始於"[",結束於"]",值之間用","分隔。

[

{name:"Peggy",email:"[email protected]",homepage:"http://www.peggy.com"}, {name:"Peggy",email:"

[email protected]",homepage:"http://www.peggy.com"},

{name:"Peggy",email:"[email protected]",homepage:"http://www.peggy.com"}

]

3, 值可以是字串、數字、true、false、null,也可以是物件或陣列。這些結構都能巢狀。

4,json示例:

import json

# Converting Python to JSON

json_object = json.write( python_object )

 #注:read/write是json-py.py和minijson.py的方法,而python2.6開始自帶的lib庫裡用的是simplejson.py,其沒有read/write方法,而是load/loads/dump/dumps

# Converting JSON to Python

python_object = json.read( json_object )

5,simplejson 示例:

import simplejson

# Converting Python to JSON

json_object = simplejson.dumps( python_object )

# Converting JSON to Python

python_object = simplejson.loads( json_object )

二、python從web介面上查詢資訊

1,先看個例子

>>> import urllib

>>> url='http://a.bkeep.com/page/api/saInterface/searchServerInfo.htm?serviceTag=729HH2X'

>>> page=urllib.urlopen(url)

>>> data=page.read()

>>> print data           //這個就是json的資料結構,str型別

{"total":1,"data":[{"outGuaranteeTime":"","assetsNum":"B50070100007003","cabinet":"H05","deviceModel":"PowerEdge 1950","hostname":"hzshterm1.alibaba.com","logicSite":"中文站","memoryInfo":{"amount":4,"size":8192},"ip":"172.16.20.163","isOnline":true,"useState":"使用中","serviceTag":"729HH2X","cpuInfo":{"amount":2,"masterFrequency":1995,"model":"Intel(R) Xeon(R) CPU           E5405  @ 2.00GHz","coreNum":8,"l2CacheSize":6144},"cabinetPositionNum":"","buyTime":"2009-06-29","manageIp":"172.31.58.223","idc":"杭州德勝機房","responsibilityPerson":"張之誠"}],"errorMsg":"","isSuccess":true}

>>> type(data)

<type 'str'>

2,有了json資料結構,我卻不知道怎麼把它解析出來,幸虧有了李建輝的指導。大概思路是:

首先,json基本上是key/value的,python中就叫字典。既然是字典,那就應該安照讀字典的方式去讀。

將上面的data轉為字典型別,這裡用json模組的read方法。

>>> import json

>>> ddata=json.read(data)

>>> ddata

{'isSuccess': True, 'errorMsg': '', 'total': 1, 'data': [{'isOnline': True, 'idc': '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf', 'assetsNum': 'B50070100007003', 'responsibilityPerson': '\xe5\xbc\xa0\xe4\xb9\x8b\xe8\xaf\x9a', 'deviceModel': 'PowerEdge 1950', 'serviceTag': '729HH2X', 'ip': '172.16.20.163', 'hostname': 'hzshterm1.alibaba.com', 'manageIp': '172.31.58.223', 'cabinet': 'H05', 'buyTime': '2009-06-29', 'useState': '\xe4\xbd\xbf\xe7\x94\xa8\xe4\xb8\xad', 'memoryInfo': {'amount': 4, 'size': 8192}, 'cpuInfo': {'coreNum': 8, 'l2CacheSize': 6144, 'amount': 2, 'model': 'Intel(R) Xeon(R) CPU           E5405  @ 2.00GHz', 'masterFrequency': 1995}, 'cabinetPositionNum': '', 'outGuaranteeTime': '', 'logicSite': '\xe4\xb8\xad\xe6\x96\x87\xe7\xab\x99'}]}

>>> 

看看ddata已經是dict型別了

>>> type(ddata)

<type 'dict'>

其次,我們以讀字典中key為”data”對應的鍵值

>>> ddata['data']    //檢視字典的方法!

[{'isOnline': True, 'idc': '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf', 'assetsNum': 'B50070100007003', 'responsibilityPerson': '\xe5\xbc\xa0\xe4\xb9\x8b\xe8\xaf\x9a', 'deviceModel': 'PowerEdge 1950', 'serviceTag': '729HH2X', 'ip': '172.16.20.163', 'hostname': 'hzshterm1.alibaba.com', 'manageIp': '172.31.58.223', 'cabinet': 'H05', 'buyTime': '2009-06-29', 'useState': '\xe4\xbd\xbf\xe7\x94\xa8\xe4\xb8\xad', 'memoryInfo': {'amount': 4, 'size': 8192}, 'cpuInfo': {'coreNum': 8, 'l2CacheSize': 6144, 'amount': 2, 'model': 'Intel(R) Xeon(R) CPU           E5405  @ 2.00GHz', 'masterFrequency': 1995}, 'cabinetPositionNum': '', 'outGuaranteeTime': '', 'logicSite': '\xe4\xb8\xad\xe6\x96\x87\xe7\xab\x99'}]

>>>type(ddata[‘data’])

<type 'list'>

發現ddata[‘data’]是一個列表,列表就要用序號來查詢

>>> ddata['data'][0]         //檢視列表的方法!

{'isOnline': True, 'idc': '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf', 'assetsNum': 'B50070100007003', 'responsibilityPerson': '\xe5\xbc\xa0\xe4\xb9\x8b\xe8\xaf\x9a', 'deviceModel': 'PowerEdge 1950', 'serviceTag': '729HH2X', 'ip': '172.16.20.163', 'hostname': 'hzshterm1.alibaba.com', 'manageIp': '172.31.58.223', 'cabinet': 'H05', 'buyTime': '2009-06-29', 'useState': '\xe4\xbd\xbf\xe7\x94\xa8\xe4\xb8\xad', 'memoryInfo': {'amount': 4, 'size': 8192}, 'cpuInfo': {'coreNum': 8, 'l2CacheSize': 6144, 'amount': 2, 'model': 'Intel(R) Xeon(R) CPU           E5405  @ 2.00GHz', 'masterFrequency': 1995}, 'cabinetPositionNum': '', 'outGuaranteeTime': '', 'logicSite': '\xe4\xb8\xad\xe6\x96\x87\xe7\xab\x99'}

>>> 

呵呵,ddata[‘data’]列表的0號元素是個字典。。

好,那我們查查key為idc的鍵值是多少

>>> ddata['data'][0]['idc']          //檢視字典的方法!

'\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf'

>>> print ddata['data'][0]['idc']   //呵呵,為什麼print搞出來的是漢字呢?

杭州德勝機房

看到這裡終於明白怎麼解析json資料結構了。。。

那就是”一層一層往下剝”

-------------------------------------------------------------------------------

#! /usr/bin/env python
#coding=utf-8
import json

s = '[{"name":"鳥巢","point":{"lat":"39.990","lng":"116.397"},"desc":"奧運會主場地"},{"name":"北大乒乓球館","point":{"lat":"39.988","lng":"116.315"},"desc":"乒乓球比賽場地"},{"name":"北京工人體育場","point": {"lat":"39.930","lng":"116.446"},"desc":"足球比賽場地"}]'

locations = json.read(s) 

 #注:read是json-py.py和minijson.py的方法,而python2.6開始自帶的lib庫裡用的是simplejson.py,其沒有read方法,而是load/loads
print str(len(locations))
for location in locations:
    print location["name"]
    print location["point"]["lat"]

-------------------------------------------------------------------------------

 #!/usr/local/bin/python

#coding = utf-8

import os

import json Res='[{"brief":"ooooo","class_extid":13,"create_time":1131783174,"face_id":4,"flag":6777217,"flag_ext":0,"level":0,"max_member":100,"memo":"[email protected]~B","name":"10502","option":2,"ul":[{"flag":4,"u":285},{"flag":4,"u":35}]}]'

qDic = json.loads(Res)

for i in qDic:

   print i["class_extid"] 

       for j in i["ul"]:

            print str(j["flag"]) + "===" + str(j["u"])

=================================================================================

# python t4.sh
13
4===285
4===35
#

PS:更多範例請參考

相關推薦

Python解析json資料結構範例

from:http://bkeep.blog.163.com/blog/static/12341429020113156582685/ 一、JSON的格式: 1,物件: {name:"Peggy",email:"[email protected]",homepage:"http://www

python解析JSON數據結構

rip ava json數據結構 括號 面向對象 鍵值 json style spa 1 對象: 對象在js中表示為”{}”括起來的內容,數據結構為{key:value, key:value…}的鍵值對結構,在面向對象的語言中,key為對象的屬性,value為對應屬性的值,

python解析json格式的天氣資料

備註:使用eval()轉換為字典,提取字典中的元素。 import requests import json url = 'http://wthrcdn.etouch.cn/weather_mini

python解析json

size class bsp 解析json gbk turn python 模式 pytho 創建json文件 { "fontFamily": "微軟雅黑", "fontSize": 12, "BaseSettings":{ "font":1

高階Python----常用的資料結構與演算法

前言 高階Python系列文章是筆者想要突破自己目前的技術生涯瓶頸而作,不具有普適性。本文主要是介紹Python在資料結構和演算法中常用的函式。這也是資料分析領域必備知識點。 也不是特地為了某些讀者而作,想著提高自己的同時,能方便他人就更好了。懂分享的人,一定會快樂!

c語言建立和解析json資料

之前一篇有說到使用lincurl庫獲取網頁資料,那麼問題來了,當我們獲取到的資料大多是json的格式,應該怎麼解析出我們需要的欄位呢?下面我們使用json-glib庫來對json資料進行建立和解析。 #include<json-glib/json-glib.h> #include

ajax中解析json資料的方式

eval();  //此方法不推薦 JSON.parse();  //推薦方法 一、兩種方法的區別 我們先初始化一個json格式的物件:   var jsonDate = '{ "name":"周星馳","age":23 }'   var

Gson解析json資料

簡介: Json資料是類似xml型別的資料轉化格式但是它的傳輸速率遠遠高於xml的解析速率。 這裡簡單的對用gson解析json格式的資料,為什麼說是簡單的介紹呢,因為博主有更簡單的解析方式後期會進行推出或者掃描頭像進 行私聊(公眾號)。 進行整合:  這裡按照a

【12】python 棧型資料結構模擬、佇列型資料結構模擬

一、壓棧操作模擬 #__author:"吉*佳" #date: 2018/10/21 0021 #function:棧 # 棧:即是先進後出的一種資料結構 # (1)模擬壓棧操作 stack=[] flag=True while flag: temp = input("請輸入壓棧元素[

後臺返回json資料給前臺和前臺解析json資料

後臺返回json資料和前臺解析json資料 一般來說web開發中,前臺採用json資料提交給後臺,後臺處理資料以後返回json資料給前臺,前臺解析json,顯示資料。 總而言之,前後臺直接交換的資料格式最常用的非json資料無疑了。 這裡就總結一些json資料的前後臺處理方式。

Python基礎【資料結構:列表 | 元組 | 集合 | 字典】

序列 序列是Python中最基本的資料結構。包括字串,列表,元組,Unicode字串,buffer物件,xrange物件。序列中的每個元素都分配一個數字,即它的索引第一個索引是0,第二個索引是1,依此類推。 列表和元組 列表一個方括號內的逗號分隔值列表中可以存放不同的資料型別。

xml之SAX解析以及資料結構存入java物件

引用來自於:https://www.cnblogs.com/Qian123/p/5231303.html    https://blog.csdn.net/qq_36935755/article/details/77106322?utm_source=copy 

python - 內建資料結構總結

python資料型別: 數值型別 bool布林型別 str字串型別 list列表型別 tuple元組型別 set集合型別 dict字典型別 可變資料型別 不可變資料型別: 1.可變資料型別:list set dict(是否可以增刪改查) 2.不可變資料型別:數值 bool str tup

python 批量JSON資料,插入資料庫

newList=[{"link":"https://www.1.com/","ga_tag":"xvideos","image":"http://static.2.mobi/views/images/xvideos.png?x-oss-process=style/120"},{"link":"htt

QT使用QJson生成解析Json資料的方法

QT中使用json還是比較方便的,下面用例子直接說明 舉例子之前首先推薦一個線上解析json格式的網站,具體格式用法如下圖所示: 之後根據這個格式進行json資料解析。 QT使用json需要包含的標頭檔案 #include<qjsondocument.h> #include<qj

android 快速解析json資料搭配Gson庫中Android Studio外掛 GsonFormat

轉:https://www.jianshu.com/p/d34c5e7c8227 更簡潔的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果對json解析資料還不清楚的可以看一下我的例子:ExpandableListView+SQLite+Jso

【我的Android進階之旅】關於解析json資料中自帶轉義符號的正確操作

一、問題描述 在實現一個功能的時候,需要伺服器以json格式返回一段功能配置,比如如下所示的json配置。 1.1 我希望的json格式 { "k": "ClientFilterTrace_android", "isVisible": true

python演算法與資料結構013--二叉樹的實現及按先序,後序,中序遍歷的遞迴實現

二叉樹的深度優先遍歷: (可以用遞迴或者堆疊實現) 先序:根節點->左子樹->右子樹 中序: 左子樹->根節點->右子樹 後序:左子樹->右子樹->根節點 二叉樹按廣度優先遍歷:從上到下,從左到右遍歷按層次遍歷(利用佇列實現) cl

vb6裡解析json資料

vb6裡不支援json物件,這裡使用通過引用js來實現json的解析 獲取簡單的json串裡的值 Dim ScriptObj As Object Dim JsonStr As String JsonSt

python內建資料結構heapq【以後補充&修正】

heapq 最小堆 heapq.heapify()將列表原地轉換為堆。 sort()區別在於heap採用的是堆排序演算法,sort採用的是歸併排序演算法。 堆(heap)是一個樹形資料結構,其中子節點與父節點是一種有序關係。 二叉堆(Binary heap)可以使用以