对于组项目,我必须使用python导入JSON对象。坏的是python不断给我一个错误消息,即使JSON字符串是正确的(使用JSONLint检查它)。我用来测试它的脚本如下:
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侦探可以帮助我。错误python给我的是:
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 :(得分:2)
这是一个双重逃避问题:
"source": "<a href=\"http://twitterfeed.com\" rel=\"nofollow\"> twitterfeed </a>",
当您\"
需要将其保留转义时,"
会被解释为\\"
。所以你需要转义转义字符,就像\"
一样,然后变成"source": "<a href=\\"http://twitterfeed.com\\" rel=\\"nofollow\\"> twitterfeed </a>",
。
所以修复是:
correct_json = r""" {
或者,将整个字符串声明为原始字符串,如下所示:
{{1}}
但是这会弄乱一些已经逃过的序列。