ast.literal_eval抛出ValueError

时间:2015-10-25 05:01:42

标签: python json string literals

ast.literal_eval正在为以下JSON投掷ValueError: malformed string。 我无法发现错误是什么。我使用了在线JSON验证器,都提到这是一个有效的JSON。

有人可以帮我看一下这个字符串的错误吗?

{
    "business_id": "Iu-oeVzv8ZgP18NIB0UMqg",
    "full_address": "3320 S Hill St,South East LA,Los Angeles, CA 90007",
    "schools": [
        "University of Southern California"
    ],
    "open": true,
    "categories": [
        "Medical Centers",
        "Health and Medical"
    ],
    "photo_url": "http://s3-media1.ak.yelpcdn.com/bphoto/SdUWxREuWuPvvot6faxfXg/ms.jpg",
    "city": "Los Angeles",
    "review_count": 2,
    "name": "Southern California Medical Group",
    "neighborhoods": [
        "South East LA"
    ],
    "url": "http://www.yelp.com/biz/southern-california-medical-group-los-angeles",
    "longitude": -118.274281,
    "state": "CA",
    "stars": 3.5,
    "latitude": 34.01971,
    "type": "business"
}

2 个答案:

答案 0 :(得分:6)

true是Python中无效的文字:

In [2]: ast.literal_eval('true')
ValueError: malformed node or string: <_ast.Name object at 0x7f32a096d550>

当您需要反序列化JSON文档时,请使用json模块(特别是json.loads)。

答案 1 :(得分:3)

您在这里使用了错误的工具 - ast.literal_eval用于将 python literals 从字符串解析为python对象。它不是用于将序列化JSON中的数据加载到python中(尽管它可能也适用于一部分情况,因为序列化的json格式在某些时候恰好与python语法重叠)。

也许您在寻找json.loads