簡體   English   中英

無法使用Python JSON模塊加載有效的JSON

[英]Valid JSON won't load using Python JSON module

我有JSON格式的openWeather數據,該錯誤

Traceback (most recent call last):
  File "testjson.py", line 7, in <module>
    data = json.load(data_file)
  File "E:\Program Files\Python27\lib\json\__init__.py", line 290, in load
    **kw)
  File "E:\Program Files\Python27\lib\json\__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "E:\Program Files\Python27\lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "E:\Program Files\Python27\lib\json\decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

我已經通過JSONlint運行了JSON數據,沒關系。 就是這個

{"city":{"id":7839581,"name":"Gold Coast","coord":{"lon":153.36055,"lat":-27.97851},"country":"AU","population":0,"sys":{"population":0}},"cod":"200","message":0.0184,"cnt":40,"list":[{"dt":1488844800,"main":{"temp":297.46,"temp_min":297.12,"temp_max":297.46,"pressure":1019.12,"sea_level":1025.73,"grnd_level":1019.12,"humidity":100,"temp_kf":0.34},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":{"all":0},"wind":{"speed":5.16,"deg":203.005},"rain":{}}]}

最后是我的Python代碼

import json
from pprint import pprint


with open('weather.json') as data_file:    
    data = json.load(data_file)

pprint(data)

我已經搞砸了好幾個小時了,在這里和其他任何地方追逐線索都需要我。 與許多更細微的錯誤不同,這似乎拒絕了很多,而且我不知道為什么

有人能對此有所啟示嗎?

您需要先從文件中讀取數據,然后使用json模塊加載該數據,例如以下示例:

import json

with open("weather.json", 'r') as f:
    # read the data
    data = f.read()
    # then load it using json.loads()
    final = json.loads(data)

print(final['city'])

輸出:

{u'name': u'Gold Coast', u'country': u'AU', u'coord': {u'lat': -27.97851, u'lon': 153.36055}, u'sys': {u'population': 0}, u'id': 7839581, u'population': 0}

編輯:

您還可以使用json.load()來完成此任務,如下例所示:

import json

with open("weather.json", 'r') as f:
    final = json.load(f)

print(final['city'])

輸出:

{u'name': u'Gold Coast', u'country': u'AU', u'coord': {u'lat': -27.97851, u'lon': 153.36055}, u'sys': {u'population': 0}, u'id': 7839581, u'population': 0}

為什么這樣工作? 很簡單,您可以查看文檔json.load() ,輸入必須具有read()方法:

使用此轉換表將fp(支持.read()的包含JSON文檔的類似文件的對象)反序列化為Python對象。

否則,在json.loads() ,輸入必須是strunicode instance

使用此轉換表將s(包含JSON文檔的str或unicode實例)反序列化為Python對象。

PS:如果兩種方法都失敗,則應查看文件並檢查其是否包含有效的JSON。

好的,看來我的json已損壞。 讀取前三個字符會為它們提供高ASCII的ord值,因此我使用十六進制編輯器編輯了該文件,實際上它的開頭確實有3個字符。 他們如何到達那里完全是個謎,我一直都在使用ascii編輯器。 感謝您的答復; 這真的很奇怪。 我現在遇到一個問題,即pprint的輸出確實不是很漂亮,但是現在我可以讀取文件並擁有字典了。 非常感謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM