【问题标题】:Python JSON: NameError: name 'false' is not definedPython JSON:NameError:未定义名称'false'
【发布时间】:2014-09-07 15:14:23
【问题描述】:

我试图从 twitter json.load 这个字典:

{"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.load()。但我导致以下错误消息:

NameError: name 'false' is not defined

发生了什么?

【问题讨论】:

  • 您正在将 literal JSON 粘贴到 Python 中?将该值加载为 string.
  • 请展示您如何加载您的 JSON“dict”。在家里,它可以毫无问题地加载(使用 Python2 和 3 测试)

标签: python json


【解决方案1】:

您正试图将字符串直接粘贴到 Python 中。不要那样做,它是一个字符串序列,代表个对象。

仅 JSON看起来很像 Python,但它不是真正的 Python 代码。

在这里,我将其加载为 原始 Python 字符串,以不解释其中的任何转义:

>>> 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}

【讨论】:

  • 谢谢!实际上,这是我在文件“output.txt”中转储的许多 Twitter 消息中的一行。每条消息成为此文本文件中的一行。你能建议如何 json.load 这些消息吗?
【解决方案2】:

在转换为 json 之前,只需将 false 定义为 Falsefalse = False

这个答案受到from this answer的启发

【讨论】:

  • 更改 json 字符串的内容不是解决方案。您必须将其视为 json 对象,这意味着“true”和“false”是正确使用的符号。然后将字符串加载为 json 对象
  • @geo Mind 为什么要投反对票?我没有说在 json 字符串中将 false 转换为 False,我说的是在进行转换/json 加载之前分配 false = False。
  • 完美回答
  • @bestwishes haha​​ha 这是我见过的最好的pythonic答案。
【解决方案3】:

twitter 流为您提供 Unicode 字符串文字。您可以使用

进行检查
type(data)

在使用 JSON 反序列化之前,您需要将数据解码为 UTF-8。

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

然后使用字典来处理流。祝你好运

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2016-05-16
    • 2013-01-26
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多