2009-03-10 5 views
5

Ich implementiere eine Google-Datenquelle mit ihrer Python Library. Ich mag die Antwort aus der Bibliothek der Lage sein, in einem anderen Python-Skript importiert werden, um die jedoch simplejson library.Google Datenquelle JSON nicht gültig?

mit, auch ihre example nicht überprüft in 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}]}]} 

Wie optimiere ich die simplejson 'loads' Funktion um den obigen JSON zu importieren? Ich denke, das Hauptproblem besteht darin, dass die Objektschlüssel keine Zeichenfolgen sind.

Ich würde lieber keine Regex schreiben, um die Schlüssel in Strings zu konvertieren, da ich denke, dass ein solcher Code lästig wäre zu warten.

Ich erhalte zur Zeit einen "Expecting property name: Zeile 1 Spalte 1 (char 1)" Fehler beim Versuch, die oben genannten Json in Python mit Simplejson zu importieren.

Antwort

8

Es wird als ungültiger JSON ohne die Zeichenfolgenschlüssel betrachtet.

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

sein muss:

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

Nach der Google Data Source Seite, sind sie ungültig JSON zurück. Sie sagen es nicht speziell, aber alle ihre Beispiele fehlen Anführungszeichen auf den Schlüsseln.

Hier ist eine ziemlich vollständige Liste von JSON processors for Python, die im Detail darüber geht, welche Formate sie unterstützen und wie gut. Die meisten unterstützen keine Nicht-String-Schlüssel, , aber es scheint, dass demjson es konvertieren wird.

easy_install demjson 
+1

JSON erwartet Strings als Schlüssel, nicht Python Wörterbücher zum Beispiel {1: 1, 2: 4} ist ein gültiger Python-Wörterbuch, aber es ist ein ungültiger JSON. '{id: 1}' und '{" id ": 1}' ist ein gültiges Javascript. – jfs

+0

Um klar zu sein, meinte ich, dass das gezeigte Beispiel kein gültiges Python-Wörterbuch ist. Indexnummern sind zulässig, aber alle Namen müssen Zeichenfolgen sein. {id: 1} ist gültiges Javascript, aber ungültiges Python. – Soviut