【问题标题】:Unable to use simplejson.loads() on a string无法在字符串上使用 simplejson.loads()
【发布时间】:2012-03-01 21:50:52
【问题描述】:

我正在尝试使用 simplejson.loads(source_urls)JSON 转换为 Python 对象。

source_urls = [u'http://www.google.com', u'http://www.yahoo.com', u'http://www.facebook.com']

该行来自记录器输出。尽管它看起来像一个列表,但它实际上是作为字符串存储在数据库中的。

我收到以下错误:

JSONDecodeError:
Expecting object: line 1 column 1 (char 1)

有人有什么想法吗?

【问题讨论】:

  • 这看起来就像一行 Python 代码。我在任何地方都看不到任何 JSON。为什么你的数据库中有这样的字符串?

标签: python json simplejson


【解决方案1】:

假设你真的有一个字符串 source_urls 包含:

"[u'http://www.google.com', u'http://www.yahoo.com', u'http://www.facebook.com']"

你可以这样做:

import ast
urls = ast.literal_eval(source_urls)

这将不允许真正的代码执行。它只处理“字符串、数字、元组、列表、字典、布尔值和无”。

【讨论】:

  • 与 json 模块相比,ast 感觉快如闪电
【解决方案2】:

JSON 中的所有字符串都必须用双引号括起来。参考:http://simonwillison.net/2006/oct/11/json/

source_urls = '["http://www.google.com", "http://www.yahoo.com", 
                "http://www.facebook.com"]'
simplejson.loads(source_urls)
['http://www.google.com', 'http://www.yahoo.com', 'http://www.facebook.com']

看起来 source_urls 字符串不是由 simplejson.dumps 编码的。希望这会有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多