我有一个(可能是格式错误的)字符串,我需要转换为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:""}}
ADDED:我无法首先修改此字符串或更改生成此字符串的代码。我所拥有的只是上面引用的字符串!
尝试使用
转换字符串(包含在变量'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}}
这种行为的任何想法?原始字符串中是否存在格式错误的位置?我没有看到任何问题。
答案 0 :(得分: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}}
答案 1 :(得分:0)
JSON对象属性名称应为字符串。来自http://www.json.org/:
错误消息指出您在位置250(0键)处有一个不带引号的属性名称。
可能很难理解,因为{0:""}
在Javascript和Python中都有效(但不是合法的JSON)。