python解析json字元串
① 如何使用python提取json中指定欄位的數據
首先你獲取的json數據是字元串a的話,就
import json
d = json.loads(a)
x =d.get("想要的欄位")
x就是你要的數據
② python3.0怎麼用json從文件解析
1、說明:
python3通過json模塊load函數來解析文件。
2、代碼示例:
首先編寫一個json文件j.txt,內容如下:
{"errno":1,"errmsg":"操作成功!","data":[]}
python代碼如下:
1
2
3
4
5
6
import json
with open('j.txt', 'r') as fr:
o = json.load(fr)
print(o['errno'])
print(o['errmsg'])
print(len(o['data']))
輸出如下:
1
操作成功!
0
3、函數說明:
load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
反序列化fp(一個.read()包含 - 支持類文件對象一個JSON文件),以一個Python對象。
object_hook是將與被調用的可選功能任何對象文本解碼(一個``dict``)的結果。返回值object_hook將用來代替dict。此功能可用於實現自定義解碼器(例如JSON-RPC級提示)。
object_pairs_hook是將與被調用的可選功能任何對象的結果與對的有序列表字面解碼。該的返回值object_pairs_hook將用來代替dict。
此功能可用於實現依賴於定製解碼器命令該鍵和值對被解碼(例如,collections.OrderedDict會記得插入的順序)。如果object_hook也定義了object_pairs_hook優先。
要使用自定義JSONDecoder子類,與cls指定它kwarg;否則JSONDecoder使用。
4、其它說明:
也可以使用json.loads函數來直接處理字元串,方法如下:
o=json.loads('{"errno":0,"errmsg":"操作成功!","data":[]}')
③ 請教一個關於python處理json的問題
{
data : {
{
tg_i":" 1080723 ",
contest_i" : "1001",
sid : "1567515287"
},
{
tg_id : "1080723",
contest_id : "1001",
sid : "1567515287"
}
},
total : "2"
}
然後經過修改,變成:
?
1
{"data":{{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"},{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"}},"total":"2"}
格式化為:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"data" : { {
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
}, {
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"
}
},
"total" : "2"
}
但是,去用json解析,但是出錯:
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "right", "credits" or "license()" for more information.
>>> import json
>>> json.loads(『{"data":{{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"},{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"}},"total":"2"}』)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <mole>
json.loads(『{"data":{{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"},{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"}},"total":"2"}』)
File "D:\tmp\dev_install_root\Python27_x64\lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "D:\tmp\dev_install_root\Python27_x64\lib\json\decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\tmp\dev_install_root\Python27_x64\lib\json\decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 9 (char 9)
【折騰過程】
1.剛開始,看了看:
{"data":{{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"},{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"}},"total":"2"}
好像也都是正常的,沒什麼錯誤。
2.後來才發現,對應著錯誤的位置:
column 9
是大括弧'{『
對應著,格式化的結果中的:
"data" : { {
中的第一個大括弧
然後才發現,原來是,data鍵的值,此處寫成用大括弧括起來的:
?
1
2
3
4
5
6
7
8
9
10
"data" : { {
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
}, {
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"
}
},
但是,實際上,data的值,只是兩個dict,所以,應該是:
要麼改為list:
?
1
2
3
4
5
6
7
8
9
10
"data" : [{
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
}, {
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"
}
],
要麼改為dict:
?
1
2
3
4
5
6
7
8
9
10
"data1" : {
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
},
"data2" : {
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"
},
對應著,非格式化的內容就是:
?
1
{"data":[{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"},{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"}],"total":"2"}
和:
?
1
{"data1":{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"}, "data2":{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"},"total":"2"}
這樣才可以正常解析:
>>> json.loads(『{"data":[{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"},{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"}],"total":"2"}』)
{u』total』: u』2′, u』data』: [{u』sid』: u』1567515287′, u』contest_i』: u』1001′, u』tg_i』: u』1080723′}, {u』tg_id』: u』1080723′, u』contest_id』: u』1001′, u』sid』: u』1567515287′}]}
>>> json.loads(『{"data1":{"tg_i":"1080723","contest_i":"1001","sid":"1567515287"}, "data2":{"tg_id":"1080723","contest_id":"1001","sid":"1567515287"},"total":"2"}』)
{u』total』: u』2′, u』data1′: {u』sid』: u』1567515287′, u』contest_i』: u』1001′, u』tg_i』: u』1080723′}, u』data2′: {u』tg_id』: u』1080723′, u』contest_id』: u』1001′, u』sid』: u』1567515287′}}
【總結】
折騰json的話,前提要了解json的語法和規則。
其次才是用某種語言去處理json。
④ Python網路請求和解析json數據
Python 的 json 模塊提供了兩個函數 json.mps() 和 json.loads() 來編碼和解碼JSON數據。
如果要處理的是文件而不是字元串,可以使用 json.mp() 和 json.load() 來編碼和解碼JSON數據。例如:
⑤ 如何用Python解析Json文件
下面給出一個使用python解析json的簡單例子:
#!/usr/bin/python
importjson
#Function:Analyzejsonscript
#,
#fordetail,pleasereferto"http://json.org/json-zh.html".
#Note:
#1.Also,,
#youshoulsempinsteadofload.pleaserreferto"help(json)".
#jsonfile:
#Thefilecontentoftemp.jsonis:
#{
#"name":"00_sample_case1",
#"description":"anexample."
#}
#f=file("temp.json");
#s=json.load(f)
#prints
#f.close
#jsonstring:
s=json.loads('{"name":"test","type":{"name":"seq","parameter":["1","2"]}}')
prints
prints.keys()
prints["name"]
prints["type"]["name"]
prints["type"]["parameter"][1]
⑥ PYTHON關於提取返回JSON結果中特定欄位的問題
實際上JSON就是Python字典的字元串表示,但是字典作為一個復雜對象是無法直接轉換成定義它的代碼的字元串,Python有一個叫
simplejson的庫可以方便的完成JSON的生成和解析,這個包已經包含在Python2.6中,就叫json 主要包含四個方法:
mp和mps(從Python生成JSON),load和loads(解析JSON成Python的數據類型)mp和mps的唯一區別是
mp會生成一個類文件對象,mps會生成字元串,同理load和loads分別解析類文件對象和字元串格式的JSON
import json
dic = {
'str': 'this is a string',
'list': [1, 2, 'a', 'b'],
'sub_dic': {
'sub_str': 'this is sub str',
'sub_list': [1, 2, 3]
},
'end': 'end'
}
json.mps(dic)
#output:
#'{"sub_dic": {"sub_str": "this is sub str", "sub_list": [1, 2, 3]}, "end": "end", "list": [1, 2, "a", "b"], "str": "this is a string"}'
舉個簡單的例子就是:
import json
s = json.loads('{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}')
print s
print s.keys()
print s["name"]
print s["type"]["name"]
print s["type"]["parameter"][1]
⑦ 如何用Python,查找json格式中指定的數據,然後輸出這些查找到的數據
用Python查找json格式中指定的數據輸出這些查找到的數據的操作步驟如下:
1,打開一個編輯器,例如sublime text 3,然後創建一個新的PY文檔。