2012-09-07 59 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