2009-03-10 8 views
5

Wdrażam źródło danych Google przy użyciu ich numeru Python Library. Chciałbym odpowiedź z biblioteki, aby móc być importowane w inny skrypt Pythona pomocą simplejson library.Źródło danych Google JSON jest nieprawidłowe?

Jednak nawet ich example nie sprawdza w 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}]}]} 

Jak mogę podkręcić simplejson "ładuje" funkcję do importowania powyższego JSON? Myślę, że głównym problemem jest to, że klucze obiektu nie są ciągami.

Wolałbym nie pisać wyrażeń regularnych, aby przekonwertować klucze na ciągi znaków, ponieważ myślę, że taki kod byłby denerwujący w utrzymaniu.

Obecnie otrzymuję błąd "Oczekiwanie nazwa właściwości: wiersz 1 kolumna 1 (znak 1)" podczas próby zaimportowania powyższego json do python z simplejson.

Odpowiedz

8

Jest uważany za nieprawidłowy JSON bez kluczy ciąg.

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

musi być:

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

Według strony Google Data Source, oni powrocie nieprawidłową JSON. Nie mówią tego specjalnie, ale wszystkie ich przykłady nie zawierają cytatów na temat kluczy.

Oto dość kompletna lista JSON processors for Python, która zawiera szczegółowe informacje na temat obsługiwanych formatów i ich przydatności. Większość nie obsługuje kluczy nie będących ciągami znaków, , ale wygląda na to, że zostanie przekonwertowany na demjson.

easy_install demjson 
+1

JSON oczekuje łańcuchy jak klucze, a nie na przykład słowniki pyton {1: 1, 2: 4} jest ważne słowniku pyton ale jest nieważny JSON. '{id: 1}' i '{" id ": 1}' to poprawny skrypt JavaScript. – jfs

+0

Aby było jasne, miałem na myśli, że pokazany przykład nie jest prawidłowym słownikiem Pythona. Numery indeksów są dozwolone, ale wszelkie nazwy muszą być ciągami. {id: 1} to poprawny skrypt JavaScript, ale niepoprawny język Python. – Soviut

Powiązane problemy