L'analyse JSON en Python: comment puis-je obtenir has_key() fonctionne à nouveau après un changement de format?
J'ai le bloc suivant de code Python:
data = json.loads(line)
if data.has_key('derivedFrom'):
dFin = data['derivedFrom']
if dFin.has_key('derivedIds'):
Cette habitude de travailler correctement sur un bloc de JSON comme ceci:
"derivedFrom": {"source": "FOO", "model": "BAR", "derivedIds": ["123456"]}
Maintenant le format a changé pour:
"derivedFrom": "{\"source\": \"FOO.\", \"model\": \"BAR\", \"derivedIds\": [\"123456\"]
Et donc la dernière ligne du Python bloc de lève l'exception suivante:
'unicode' object has no attribute 'has_key'
Est-il un moyen de prétraiter JSON pour faire has_key
de travailler à nouveau?
- Comment le changement de format? Aussi, ce bloc n'est pas valide JSON.
- Le "changé" le format n'est pas valide JSON. Il ne sera pas analyser à tous.
- Et,
foo.has_key(bar)
a été orthographiébar in foo
depuis au moins Python 2.4. - Pourquoi/comment le changement de format?
Vous devez vous connecter pour publier un commentaire.
Est un objet JSON à l'intérieur d'une chaîne JSON littérale. Pour obtenir à l'intérieur JSON propriétés, vous aurez à le décoder à nouveau.
JSON-en-JSON est généralement une erreur, car il y a rarement une nécessité pour elle - qu'est-ce que la production de cette sortie, faut-il le fixer?
Utilisation:
Cela fonctionne à la fois sur les dictionnaires et sur unicode, même si avec unicode il pourrait donner de faux positifs.
Une approche plus solide pourrait utiliser Duck-Typing:
Vous sont en train de changer la dérivée de la propriété d'un objet JSON à une chaîne. Les chaînes n'ont pas un attribut nommé has_key.
Si vous voulez exactement le même bloc de code de travail, envisager d'ajuster légèrement votre nouveau format suivant: