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 键)处有一个未加引号的属性名称。

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

于 2012-09-07T09:07:18.013 回答