سؤال

For a group project I have to import a JSON object with python. The bad thing is that python keeps giving me an error message, even though the JSON string is correct (checked it with JSONLint). The script I use to test this is as follows:

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 * ' '))

Sorry for just asking for help with such a big JSON structure but this piece of code has been grinding my gears for more than one hour now and I just can't spot the error. I hope a trained JSON detective can help me out. The error python gives me is:

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)

I'm using Python 3. I'm probably missing something stupid (it would not be the first time). Thanks in advance!

هل كانت مفيدة؟

المحلول

Its a double escaping issue on this line:

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

In this \" is getting interpreted as ", when you need for it to remain escaped. So you need to escape the escape character, like so \\" so it then becomes \".

So the fix is:

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

Or, declaring the whole string as a raw string like so:

correct_json = r""" {

But this will mess up some of the already escaped sequences.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top