2017-05-05 83 views
0

我無法使用python解析JSON數據。python無法解析JSON數據

網頁網址正在返回JSON數據

import requests 
import json 

BASE_URL = "https://www.codechef.com/api/ratings/all" 
data = {'page': page, 'sortBy':'global_rank', 'order':'asc', 'itemsPerPage':'40' } 
r = requests.get(BASE_URL, data = data) 
receivedData = (r.text) 
print ((receivedData)) 

當我印這一點,我得到了較大的文本,當我確認使用https://jsonlint.com/這表明有效的JSON

後來我用

import requests 
import json  

BASE_URL = "https://www.codechef.com/api/ratings/all" 
data = {'page': page, 'sortBy':'global_rank', 'order':'asc', 'itemsPerPage':'40' } 
r = requests.get(BASE_URL, data = data) 
receivedData = (r.text) 
print (json.loads(receivedData)) 

當我使用https://jsonlint.com/驗證大印刷文本時,它顯示INVALID JSON

即使我不打印和直接使用數據。它工作正常。所以我相信,即使在內部它不正確加載。

是python無法正確解析文本到JSON?

+2

您解碼了JSON並打印了Python字典的文本表示,該字典不一定與原始JSON編碼相同。 – chepner

+2

事實上,你從第二個腳本得到任何輸出是證明Python正在解析JSON就好了;你只是沒有輸出JSON到驗證器。 – chepner

+0

即使我不打印並直接使用數據。它工作正常。所以我相信,即使在內部它不正確加載。 –

回答

1

簡而言之,json.loads將Json(thing,objcet,array,whatever)轉換爲Python對象 - 在本例中爲Json Dictionary。當您打印,將打印作爲itterative,因此用單引號打印..

有效代碼可擴展:

some_dictionary = json.loads(a_string_which_is_a_json_object) 
print(some_dictionary) 

,以確保你打印json的安全,您將需要重新編碼json.dumps

1

當您使用python的json.loads(text)它會返回一個python字典。當您打印該字典時,它不是json格式。

如果你想要一個json輸出,你應該使用json.dumps(json_object)