1

json 形式に変換する必要がある (おそらく不正な形式の) 文字列があります。取得した文字列を印刷する

{"composemsg":{"return":null,"report":"<p class=\"error j-table-ui-report-entry\">07:39:28 - Action failed<br\/>Error adding row 0<br\/> Message <span class=\"label\">\"Test Message\"<\/span>,  Receivers 'Array\n(\n    [0] => gaga7\n)\n'<br\/><\/p>",0:""}}

追加: そもそもこの文字列を変更する方法も、この文字列を生成するコードを変更する方法もありません。私が持っているのは、上で引用した文字列だけです!

を使用して文字列(変数「j」に含まれる)を変換しようとすると、

json.loads(j)

エラーが発生します:

ValueError: Expecting property name: line 1 column 250 (char 250)

ただし、コマンド ラインで python を起動し、出力された文字列に変数をアサートする (「null」を「None」に置き換える) と、正常に動作します。

In [40]: x = {"composemsg":{"return":None,"report":"<p class=\"error j-table-ui-report-entry\">07:39:28 - Action failed<br\/>Error adding row 0<br\/> Message <span class=\"label\">\"Test Message\"<\/span>,  Receivers 'Array\n(\n    [0] => gaga7\n)\n'<br\/><\/p>",0:""}}
In [41]: x
Out[41]: 
{'composemsg': {0: '','report': '<p class="error j-table-ui-report-entry">07:39:28 - Action failed<br\\/>Error adding row 0<br\\/> Message <span class="label">"Test Message<\\/span>,  Receivers \'Array\n(\n    [0] => gaga7\n)\n\'<br\\/><\\/p>', 'return': None}}

この動作のアイデアはありますか? 元の文字列に不正な場所はありますか? 問題はありません。

4

2 に答える 2

0

引用符をエスケープしているため、生の文字列を使用して処理を簡単にする必要があります。

0さらに、文字列の最後に、引用符で囲まれていない属性があります。

これが私のために働くバージョンです:

>>> x = r"""{
...     "composemsg": {
...         "return": null,
...         "report": "<p class=\"error j-table-ui-report-entry\">07:39:28 - Action failed<br\/>Error adding row 0<br\/> Message <span class=\"label\">\"Test Message\"<\/span>, Receivers 'Array\n(\n    [0] => gaga7\n)\n'<br\/><\/p>",
...         "0": ""
...     }
... }"""
>>> json.loads(x)
{u'composemsg': {u'report': u'<p class="error j-table-ui-report-entry">07:39:28 - Action failed<br/>Error adding row 0<br/> Message <span class="label">"Test Message"</span>, Receivers \'Array\n(\n    [0] => gaga7\n)\n\'<br/></p>', u'0': u'', u'return': None}}
于 2012-09-07T09:02:35.570 に答える
0

JSON オブジェクトのプロパティ名は文字列にする必要があります。http://www.json.org/から:

ここに画像の説明を入力

エラー メッセージは、位置 250 (0 キー) に引用符で囲まれていないプロパティ名があることを示しています。

Javascript と Python の両方で有効であるため、把握するのが難しい場合があります{0:""}(ただし、正当な JSON ではありません)。

于 2012-09-07T09:07:18.013 に答える