web-dev-qa-db-ja.com

Pythonでやや間違ったJSONを解析する方法は?

外部入力ソースからの次のJSON文字列があります。

{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}

これは間違った形式のJSON文字列です(「id」と「value」は引用符で囲む必要があります)が、とにかく解析する必要があります。 simplejsonとjson-pyを試しましたが、そのような文字列を解析するように設定できなかったようです。

私はGoogleAppEngineでPython 2.5を実行しているので、python-cjsonのようなCベースのソリューションは適用できません。

上記のJSONに加えて、入力形式をXMLまたはYAMLに変更できますが、プロジェクト内でJSONを使用しているため、特定の場所で形式を変更するのはあまり適切ではありません。

これで、XMLに切り替えてデータを正常に解析しましたが、JSONに戻すことができるソリューションを楽しみにしています。

38
Serge Tarkovski

yAML(> = 1.2)はJSONのスーパーセットであるため、次のことができます。

>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}
51
mykhal

demjson を使用できます。

>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}
22
null

文字列パーサーを使用して最初に修正できますが、JSONが取得するのと同じくらい複雑であれば、正規表現で修正できます。

1
davidosomething

構文解析にはJSONパーサーの例が含まれています。これが オンラインソース です。 memberDefの定義を変更して、メンバー名に引用符で囲まれていない文字列を許可し、これを使用して、かなりJSONではないソーステキストを解析できます。

[2008年8月号のPython Magazineには、このパーサーに関するより詳細な情報があります。サンプルのJSONと、逆シリアル化されたオブジェクトのように解析結果にアクセスするコードが表示されます。

0
PaulMcG