2013-10-29 60 views
1

對於組項目,我必須使用python導入JSON對象。不好的一面是,即使JSON字符串正確(使用JSONLint檢查它),python仍然給我一條錯誤消息。該腳本我用它來測試,這是如下:即使輸入正確,Python JSON模塊也會出錯

import json 

correct_json = """ { 
    "created_at": "Tue Feb 19 18:42:07 +0000 2013", 
    "id": 303937526471725060, 
    "id_str": "303937526471725056", 
    "text": "Batavierenrace door #Ulft: Eind april klinkt jaarlijks het startschot voor de grootste estafetteloop v... http:\\/\\/t.co\\/hijGD3pk #Enschede", 
    "source": "<a href=\"http://twitterfeed.com\" rel=\"nofollow\"> twitterfeed </a>", 
    "truncated": false, 
    "in_reply_to_status_id": null, 
    "in_reply_to_status_id_str": null, 
    "in_reply_to_user_id": null, 
    "in_reply_to_user_id_str": null, 
    "in_reply_to_screen_name": null, 
    "user": { 
     "id": 258430204, 
     "id_str": "258430204", 
     "name": "EnschedeNieuws", 
     "screen_name": "nieuws_enschede", 
     "location": "", 
     "url": "http://drimble.nl/regio/overijssel/enschede/", 
     "description": "AlhetnieuwsoverEnschede", 
     "protected": false, 
     "followers_count": 1344, 
     "friends_count": 17, 
     "listed_count": 18, 
     "created_at": "Sun Feb 27 18:17:21 +0000 2011", 
     "favourites_count": 0, 
     "utc_offset": null, 
     "time_zone": null, 
     "geo_enabled": false, 
     "verified": false, 
     "statuses_count": 20044, 
     "lang": "en", 
     "contributors_enabled": false, 
     "is_translator": false, 
     "profile_background_color": "131516", 
     "profile_background_image_url": "http://a0.twimg.com/images/themes/theme14/bg.gif", 
     "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme14/bg.gif", 
     "profile_background_tile": true, 
     "profile_image_url": "http://a0.twimg.com/profile_images/1256839194/enschede_normal.jpg", 
     "profile_image_url_https": "https://si0.twimg.com/profile_images/1256839194/enschede_normal.jpg", 
     "profile_link_color": "009999", 
     "profile_sidebar_border_color": "EEEEEE", 
     "profile_sidebar_fill_color": "EFEFEF", 
     "profile_text_color": "333333", 
     "profile_use_background_image": true, 
     "default_profile": false, 
     "default_profile_image": false, 
     "following": null, 
     "follow_request_sent": null, 
     "notifications": null 
    }, 
    "geo": null, 
    "coordinates": null, 
    "place": null, 
    "contributors": null, 
    "retweet_count": 0, 
    "entities": { 
     "hashtags": [ 
      { 
       "text": "Ulft", 
       "indices": [ 
        20, 
        25 
       ] 
      }, 
      { 
       "text": "Enschede", 
       "indices": [ 
        127, 
        136 
       ] 
      } 
     ], 
     "urls": [ 
      { 
       "url": "http://t.co/hijGD3pk", 
       "expanded_url": "http://bit.ly/UE0MCq", 
       "display_url": "bit.ly/UE0MCq", 
       "indices": [ 
        106, 
        126 
       ] 
      } 
     ], 
     "user_mentions": [] 
    }, 
    "favorited": false, 
    "retweeted": false, 
    "possibly_sensitive": false 
} """ 

other_json = """ { \ 
    "foo" : 5,\ 
    "bar" : ["spam", "eggs"] \ 
} """ 

print(json.dumps(json.loads(correct_json), sort_keys=True, indent=4 * ' ')) 

對不起,只是在尋求幫助,這麼大的JSON結構,但這塊的代碼已經被現磨我擋了一個多小時,我只是能不會發現錯誤。我希望一個訓練有素的JSON偵探能幫助我。錯誤蟒蛇給我的是:

D:\Documenten\Dropbox>python jsontest.py 
Traceback (most recent call last): 
    File "jsontest.py", line 99, in <module> 
    print(json.dumps(json.loads(correct_json), sort_keys=True, indent=4 * ' ')) 
    File "C:\Python33\lib\json\__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python33\lib\json\decoder.py", line 352, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Python33\lib\json\decoder.py", line 368, in raw_decode 
    obj, end = self.scan_once(s, idx) 
ValueError: Expecting ',' delimiter: line 6 column 25 (char 305) 

我使用Python 3,我可能失去了一些東西愚蠢的(它不會是第一次)。提前致謝!

+0

爲什麼json以「」開頭? – MONTYHS

+0

@MONTYHS:要啓用多行字符串而不使用\(或/,不知道哪一個啓用了多行的東西)和字符串解釋(我猜) – bobismijnnaam

回答

2

它在這條線的雙重逃避問題:

"source": "<a href=\"http://twitterfeed.com\" rel=\"nofollow\"> twitterfeed </a>", 

在這種\"是越來越理解爲",當你需要爲它仍然逃脫。所以你需要逃避轉義字符,就像\\"那樣它就變成了\"

因此,解決方法是:

"source": "<a href=\\"http://twitterfeed.com\\" rel=\\"nofollow\\"> twitterfeed </a>", 

或者,宣告整個字符串作爲原始字符串,像這樣:

correct_json = r""" { 

但是,這會搞亂一些已經逃出序列。

+0

謝謝!現在我終於可以繼續我的項目! – bobismijnnaam

相關問題