2010-08-05 9 views
0

Je récupère des données d'une URL, et recherche en ligne pour trouver les données dans le format de données de Jason, mais quand j'ai essayé d'utiliser simplejson.loads (données), il lèvera l'exception.Comment utiliser simplejson pour décoder les données suivantes?

Première fois traiter avec des données jason, une suggestion de comment décoder les données? Merci

================= résultat = simplejson.loads (données, encoding = "utf-8") fichier « F: \ Mes Documents \ My Dropbox \ StockDataDownloader \ simplejson__init __. Py ", ligne 401, dans les charges return cls (encoding = encoding, ** kw) .decode (s) Fichier" F: \ Mes documents \ My Dropbox \ StockDataDownloader \ simplejson \ decoder.py ", ligne 402, dans le décodage obj, end = self.raw_decode (s, idx = _w (s, 0) .end()) Fichier" F: \ Mes documents \ My Dropbox \ StockDataDownloader \ simplejson \ decoder.py ", ligne 420, dans raw_decode raise JSONDecodeError (" Aucun objet JSON n'a pu être décodé ", s, idx) simplejson.decoder.JSONDecodeError: Aucun objet JSON n'a pu être détecté décoder: ligne 1 colonne 0 (char 0)

============================

data = " {identifiant: 'ID', libellé: 'Au Mer 4 Aug 2010 17:05', objets: [{ID: 0, N: '2ndChance', NC: '528', R: 'AUCUN', I: 'NONE', M: '-', LT: 0,335, C: 0,015, VL: 51,000, BV: 20,000, B: 0,330, S: 0,345, SV: 20,000, O: 0,335, H: 0,335, L: 0,335, V: 17085.000, SC: '4', PV: 0.320, P: 4.6875, P _: 'X', V _: ''}, {ID: 1, N: '8Telecom', NC: 'E25', R: ' NONE ', I:' NONE ', M:' - ', LT: 0,190, C: 0,000, VL: 965,000, BV: 1305,000, B: 0,185, S: 0,190, SV: 641,000, O: 0,185, H: 0,190 L: 0,185, V: 179525,000, SC: '2', PV: 0,190, P: 0,0, P _: 'X', V _: ''}, {ID: 2, N: 'A-Sonic', NC: 'A53', R: 'NONE', I: 'NONE', M: '-', LT: 0,090, C: 0,005, VL: 1278 000, BV: 17,000, B: 0,090, S: 0,095, SV: 346,000, O: 0,090, H: 0,090, L: 0,090, V: 115020,000, SC: 'A', PV: 0,085, P: 5,882352734375, P _: 'X', V _: ''}, {ID: 3, N: ' AA Grp ', NC:' 5GZ ', R:' AUCUN ' , I: 'NONE', M: 't', LT: 0,000, C: 0,000, VL: 0,000, BV: 100,000, B: 0,050, S: 0,060, SV: 50,000, O: 0,000, H: 0,000, L : 0.000, V: 0.000, SC: '2', PV: 0.050, P: 0.0, P _: 'X', V_: ''}]} "

Répondre

2

Vous utilisez correctement simplejson, mais le site que vous a donné que les données n'utilisent pas correctement le format JSON. Regardez json.org, qui utilise des diagrammes de syntaxe simples pour montrer ce qui est JSON: dans le diagramme objet , après { (sauf si l'objet est vide, auquel cas un } suit immédiatement), JSON a toujours une chaîne - et Comme vous le voyez dans diagramme, cela signifie quelque chose qui commence par une double citation. Ainsi, le début de la chaîne:

{identifier: 

vous dit que ce JSON incorrect - pas de guillemets autour du mot identifier.

Il n'était pas aussi simple de contourner ce problème que de reconnaître le problème, mais je voulais au moins vous rassurer à propos de votre code. Sigh il semble que les sites Web brisés, une si grande tradition dans les anciens jours HTML, sont avec nous de rester, peu importe la façon dont la technologie qu'ils cassent est ... :-(

+0

Merci pour votre réponse. J'ai essayé d'utiliser des guillemets doubles pour entourer les clés, et je peux utiliser simplejson pour décoder les guillemets simples, Donc, la seule façon est d'utiliser l'expression régulière pour rechercher des clés et entourer de guillemets, puis remplacer tous les guillemets simples. citations avec des guillemets doubles, puis utilisez simplejson pour décoder les données? Les données proviennent du site Web de bourse pour afficher des informations de stock. – yongzhy

+0

@yongzhy, je recommanderais Pyparsing plutôt qu'un tas de regexes + simplejson, voir http://pyparsing.wikispaces.com/ - mais l'essentiel est définitivement correct: vous ne pouvez pas utiliser simplejson pour analyser quelque chose qui n'est pas Json. –

Questions connexes