2012-09-07 77 views
1

我有一個(可能格式不正確)的字符串,我需要轉換爲json格式。打印出我得到的字符串json python轉換問題

{"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:""}} 

ADDED:我無法首先修改此字符串或更改生成此字符串的代碼。我所擁有的就是上面引用的字符串!

當試圖將字符串轉換(包含在變量「J」)使用

json.loads(j) 

我得到一個錯誤:

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

然而,在啓動命令行Python和斷言時一個變量打印輸出的字符串(用'None'代替'null'),它工作正常:

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}} 

任何i這種行爲的設計?原始字符串中是否有格式不正確的地方?我沒有看到任何問題。

+0

如果有一些問題的答案,我會接受他們當然... – Alex

+0

我看到六個問題與十一個答案,你沒有接受。 – 2012-09-07 09:11:38

+0

我只能接受一個答案,如果它解決了我的問題。我應該將未回答的問題標記爲「不重要」或什麼嗎? – Alex

回答

0

JSON對象屬性的名稱應該是字符串。從http://www.json.org/

enter image description here

錯誤消息指向您在位置250(0鍵)有一個不帶引號的屬性名稱。

可能很難弄清楚,因爲{0:""}在Javascript和Python中都是有效的(但不是合法的JSON)。

+0

因此,它意味着原始字符串是一個格式錯誤的字符串,而不是合法的json格式字符串?該錯誤是在創建此字符串的代碼中? – Alex

+0

@Alex:字符串是合法的JS,但不合法的JSON。 –

+0

@Alex ...是的,它不合法的JSON。 – Fabian

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}} 
+0

我不確定我瞭解你的答案。我上面引用的原始字符串是我擁有的 - 我無法更改該字符串的內容。我只能將它原樣使用,以便將其轉換爲json格式。或者我應該做一些像x = r「」「%s」「」%s? – Alex