2017-05-05 82 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)