2009-03-10 4 views
5

Я использую источник данных Google, используя их Python Library. Я хотел бы ответ из библиотеки, чтобы иметь возможность импортировать в другой сценарий Python с использованием simplejson library.Источник данных Google JSON недействителен?

Однако даже их example не проверяет в JSONLint:

{cols: 
    [{id:'name',label:'Name',type:'string'}, 
    {id:'salary',label:'Salary',type:'number'}, 
    {id:'full_time',label:'Full Time Employee',type:'boolean'}], 
rows: 
    [{c:[{v:'Jim'},{v:800,f:'$800'},{v:false}]}, 
    {c:[{v:'Bob'},{v:7000,f:'$7,000'},{v:true}]}, 
    {c:[{v:'Mike'},{v:10000,f:'$10,000'},{v:true}]}, 
    {c:[{v:'Alice'},{v:12500,f:'$12,500'},{v:true}]}]} 

Как настроить simplejson Функция «загрузки» для импорта вышеуказанного JSON? Я думаю, что основная проблема заключается в том, что ключи объекта не являются строками.

Я бы предпочел не писать регулярное выражение для преобразования ключей в строки, так как я думаю, что такой код будет раздражать для поддержания.

В настоящее время я получаю сообщение об ожидании имени объекта: строка 1 столбец 1 (char 1) "при попытке импортировать вышеупомянутый json в python с помощью simplejson.

ответ

8

Он считается недействительным JSON без строковых ключей.

{id:'name',label:'Name',type:'string'} 

должны быть:

{'id':'name','label':'Name','type':'string'} 

Согласно Google Data Source странице, они возвращаются недопустимый JSON. Они конкретно не говорят об этом, но на всех их примерах не хватает котировок на клавишах.

Вот довольно полный список JSON processors for Python, который подробно рассказывает о форматах, которые они поддерживают, и о том, насколько хорошо. Большинство из них не поддерживают нестрочные ключи, , но оказывается, что demjson его преобразует.

easy_install demjson 
+1

JSON ожидает строки как ключи, а не Python словари, например, {1: 1, 2: 4} является допустимым словарь Python, но это неверный JSON. '{id: 1}' и '{" id ": 1}' является допустимым Javascript. – jfs

+0

Чтобы быть ясным, я имел в виду, что показанный пример не является допустимым словарем python. Номера индексов являются законными, но любые имена должны быть строками. {id: 1} является действительным Javascript, но недействительным Python. – Soviut

Смежные вопросы