2015-10-25 2 views
0

ast.literal_eval бросает ValueError: malformed string для следующего JSON. Я не могу определить, что это за ошибка. Я использовал онлайн-валидаторы JSON, все упоминают, что это действительный JSON.ast.literal_eval throwing ValueError

Может кто-нибудь помочь мне определить ошибку с помощью этой строки?

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

ответ

5

true является недопустимым буквальным в Python:

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

Используйте json модуль (специально json.loads), когда вам нужно десериализации JSON документа.

+0

Это правильно. true и false недействительны в Literal Eval. Как только я заменил их правильными строками, он сработал. –

3

Вы используете неправильный инструмент для работы здесь - ast.literal_eval предназначен для разбора питона литералов из строк в объекты Python. Он не предназначен для загрузки данных из сериализованного JSON в python (хотя он может также работать для него в подмножестве случаев, поскольку сериализованный json-формат иногда частично перекрывается с синтаксисом python).

Возможно, вы искали json.loads?

+0

Сложность входов, поддерживаемых 'ast.literal_eval' и' json.loads', примерно одинакова. Это не похоже на то, что 'ast.literal_eval' ограничен одиночными токенами или даже фиксированным уровнем вложенности. Важно то, что они не того же формата. – user2357112

+0

ok, отредактированная фраза для вас – wim