Sto raschiando alcuni dizionari JSONP da AWS (dai file javascript). Dopo aver analizzato i dati non elaborati solo per i dati simili a JSON, in alcuni casi ottengo un JSON valido e posso caricarlo correttamente in Python (json_data = json.loads(json_like_data)
). Tuttavia, alcuni JSONP di Amazon non includono le virgolette sulle loro chiavi (vedi quanto segue).Python: Bad JSON - Le chiavi non sono quotate
...
{type:"storageCurrentGen",sizes:
[{size:"i2.xlarge",vCPU:"4",ECU:"14",memoryGiB:"30.5",storageGB:"1 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"0.938"}}]},
{size:"i2.2xlarge",vCPU:"8",ECU:"27",memoryGiB:"61",storageGB:"2 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"1.876"}}]},
{size:"i2.4xlarge",vCPU:"16",ECU:"53",memoryGiB:"122",storageGB:"4 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"3.751"}}]},
...
Per JSONP, funziona ancora come la sintassi JavaScript valida. Tuttavia, il codice json.loads(json_str)
di Python fallisce in quanto non valido JSON.
C'è un altro modulo Python YAML che può gestire chiavi non quotate, MA deve esserci uno spazio dopo il punto e virgola (:
).
Immagino di avere due opzioni.
- In qualche modo sostituire il carattere in mezzo una parentesi aperta o virgola (
{
|,
) e due punti (:
). Quindi utilizzarejson.loads(...)
. - Aggiungere uno spazio dopo mai due punti (
:
). Quindi analizzare conyaml.load(...)
.
La mia ipotesi è che l'opzione 2 sia migliore di 1. Tuttavia, sto cercando il suggerimento di una soluzione migliore.
Qualcuno ha riscontrato un JSON mal formattato come questo prima e ha usato Python per analizzarlo?
Anche per JavaScript, è ** non ** valida JSON. È un JavaScript valido, che non è esattamente la stessa cosa. –
@MartijnPieters Ah. Grazie per il chiarimento. – dlstadther