ast.literal_eval 抛出 ValueError

ast.literal_eval throwing ValueError

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

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

也许您正在寻找 json.loads

true 是 Python 中的无效文字:

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

当您需要反序列化 JSON 文档时使用 json module (specifically json.loads)。