20

I was trying to json.load this dict from twitter:

{"created_at":"Thu Jul 10 20:02:00 +0000 2014","id":487325888950710272,"id_str":"487325888950710272","text":"\u5f81\u9678\u300c\u5de6\u8155\u306e\u7fa9\u624b\u306f\u30db\u30ed\u3060\u300d","source":"\u003ca href=\"http:\/\/twittbot.net\/\" rel=\"nofollow\"\u003etwittbot.net\u003c\/a\u003e","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":1429838018,"id_str":"1429838018","name":"\u3053\u3093\u306a\uff30\uff30\u306f\u5acc\u3060\u3002","screen_name":"iyada_pp","location":"\u516c\u5b89\u5c40\u306e\u3069\u3053\u304b\u3002","url":null,"description":"\u3010\u3053\u3093\u306aPSYCHO-PASS\u306f\u5acc\u3060\u306a\u3011\u3068\u3044\u3046\u304f\u3060\u3089\u306a\u3044\u5984\u60f3bot\u3067\u3059\u3002\u30ad\u30e3\u30e9\u5d29\u58ca\u304c\u6fc0\u3057\u3044\u306e\u3067\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002","protected":false,"followers_count":99,"friends_count":98,"listed_count":5,"created_at":"Wed May 15 07:52:33 +0000 2013","favourites_count":0,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":12584,"lang":"ja","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/3661872276\/ab7201283dac5dc1789bb6dfa9b6abe4_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/3661872276\/ab7201283dac5dc1789bb6dfa9b6abe4_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ja"}

I did json.load() to that dict. but I resulted error message below:

NameError: name 'false' is not defined

What happened?

Cory Kramer
  • 114,268
  • 16
  • 167
  • 218
Charlo123
  • 323
  • 1
  • 2
  • 7

3 Answers3

36

You are trying to paste the string straight into Python. Don't do that, it is a string sequence that represents objects.

JSON only looks a lot like Python, but it is not actual Python code.

Here I loaded this as a raw Python string to not interpret any escapes in it:

>>> import json
>>> json_string = r'''{"created_at":"Thu Jul 10 20:02:00 +0000 2014","id":487325888950710272,"id_str":"487325888950710272","text":"\u5f81\u9678\u300c\u5de6\u8155\u306e\u7fa9\u624b\u306f\u30db\u30ed\u3060\u300d","source":"\u003ca href=\"http:\/\/twittbot.net\/\" rel=\"nofollow\"\u003etwittbot.net\u003c\/a\u003e","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":1429838018,"id_str":"1429838018","name":"\u3053\u3093\u306a\uff30\uff30\u306f\u5acc\u3060\u3002","screen_name":"iyada_pp","location":"\u516c\u5b89\u5c40\u306e\u3069\u3053\u304b\u3002","url":null,"description":"\u3010\u3053\u3093\u306aPSYCHO-PASS\u306f\u5acc\u3060\u306a\u3011\u3068\u3044\u3046\u304f\u3060\u3089\u306a\u3044\u5984\u60f3bot\u3067\u3059\u3002\u30ad\u30e3\u30e9\u5d29\u58ca\u304c\u6fc0\u3057\u3044\u306e\u3067\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002","protected":false,"followers_count":99,"friends_count":98,"listed_count":5,"created_at":"Wed May 15 07:52:33 +0000 2013","favourites_count":0,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":12584,"lang":"ja","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/3661872276\/ab7201283dac5dc1789bb6dfa9b6abe4_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/3661872276\/ab7201283dac5dc1789bb6dfa9b6abe4_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ja"}'''
>>> json.loads(json_string)
{u'contributors': None, u'truncated': False, u'text': u'\u5f81\u9678\u300c\u5de6\u8155\u306e\u7fa9\u624b\u306f\u30db\u30ed\u3060\u300d', u'in_reply_to_status_id': None, u'id': 487325888950710272, u'favorite_count': 0, u'source': u'<a href="http://twittbot.net/" rel="nofollow">twittbot.net</a>', u'retweeted': False, u'coordinates': None, u'entities': {u'symbols': [], u'user_mentions': [], u'hashtags': [], u'urls': []}, u'in_reply_to_screen_name': None, u'id_str': u'487325888950710272', u'retweet_count': 0, u'in_reply_to_user_id': None, u'favorited': False, u'user': {u'follow_request_sent': None, u'profile_use_background_image': True, u'default_profile_image': False, u'id': 1429838018, u'profile_background_image_url_https': u'https://abs.twimg.com/images/themes/theme1/bg.png', u'verified': False, u'profile_image_url_https': u'https://pbs.twimg.com/profile_images/3661872276/ab7201283dac5dc1789bb6dfa9b6abe4_normal.jpeg', u'profile_sidebar_fill_color': u'DDEEF6', u'profile_text_color': u'333333', u'followers_count': 99, u'profile_sidebar_border_color': u'C0DEED', u'id_str': u'1429838018', u'profile_background_color': u'C0DEED', u'listed_count': 5, u'is_translation_enabled': False, u'utc_offset': None, u'statuses_count': 12584, u'description': u'\u3010\u3053\u3093\u306aPSYCHO-PASS\u306f\u5acc\u3060\u306a\u3011\u3068\u3044\u3046\u304f\u3060\u3089\u306a\u3044\u5984\u60f3bot\u3067\u3059\u3002\u30ad\u30e3\u30e9\u5d29\u58ca\u304c\u6fc0\u3057\u3044\u306e\u3067\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002', u'friends_count': 98, u'location': u'\u516c\u5b89\u5c40\u306e\u3069\u3053\u304b\u3002', u'profile_link_color': u'0084B4', u'profile_image_url': u'http://pbs.twimg.com/profile_images/3661872276/ab7201283dac5dc1789bb6dfa9b6abe4_normal.jpeg', u'following': None, u'geo_enabled': False, u'profile_background_image_url': u'http://abs.twimg.com/images/themes/theme1/bg.png', u'name': u'\u3053\u3093\u306a\uff30\uff30\u306f\u5acc\u3060\u3002', u'lang': u'ja', u'profile_background_tile': False, u'favourites_count': 0, u'screen_name': u'iyada_pp', u'notifications': None, u'url': None, u'created_at': u'Wed May 15 07:52:33 +0000 2013', u'contributors_enabled': False, u'time_zone': None, u'protected': False, u'default_profile': True, u'is_translator': False}, u'geo': None, u'in_reply_to_user_id_str': None, u'lang': u'ja', u'created_at': u'Thu Jul 10 20:02:00 +0000 2014', u'filter_level': u'medium', u'in_reply_to_status_id_str': None, u'place': None}
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
  • Thanks! Actually that is one line of many twitter messages I dumped in a file 'output.txt'. each message become one line in this text file. Can you suggest on how to json.load those messages? – Charlo123 Jul 16 '14 at 22:56
  • 1
    @user3602696: see [Loading & Parsing JSON file in python](http://stackoverflow.com/a/12451465) – Martijn Pieters Jul 16 '14 at 23:14
  • what is the functionality of r''' in the code? – Gaurav Srivastava Aug 03 '22 at 19:49
  • @GauravSrivastava `r` makes it a raw string, so `\` has no special meaning; otherwise I’d have to use `\\u….` because `\u` has meaning to Python strings as well as for JSON. – Martijn Pieters Aug 13 '22 at 16:13
21

Just define false to False before converting to json. false = False

This answer is inspired from this answer

best wishes
  • 5,789
  • 1
  • 34
  • 59
  • changing content of the json string is not a solution. you must treat it as if it were a json object which means "true" and "false" are the correct notation to use. then load the string as a json object – geominded Jun 15 '18 at 18:51
  • 3
    @geominded why downvote? I did not say convert false to False in json string, I said assign false = False, before doing the conversion/json loading. – best wishes Jun 16 '18 at 02:16
  • 2
    answered perfectly – jouell Feb 25 '21 at 05:04
  • 1
    @bestwishes hahaha that's the best pythonic answer I have ever seen. – ChampR Apr 16 '21 at 10:40
2

the twitter stream gives you a Unicode string literal. you can check the same by using

type(data)

You will need to decode the data into UTF-8 before using the JSON deserialization for eg.

json.loads(data.decode('utf-8'))

and then use the dictionary to process the stream. Good luck

Pratik Sayare
  • 96
  • 1
  • 7