5

我在 PHP 中创建了一个 JSON 对象,该 JSON 对象在其中一个单元格中包含另一个转义的 JSON 字符串:

php > $insidejson = array('foo' => 'bar','foo1' => 'bar1');
php > $arr = array('a' => array('a1'=>json_encode($insidejson)));
php > echo json_encode($arr);
{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}

然后,使用 Python,我尝试使用 simplejson 对其进行解码:

>>> 将 simplejson 导入为 json
>>> json.loads('{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}')

这失败并出现以下错误:

回溯(最近一次通话最后):
  文件“”,第 1 行,在?
  加载中的文件“build/bdist.linux-i686/egg/simplejson/__init__.py”,第 307 行
  解码中的文件“build/bdist.linux-i686/egg/simplejson/decoder.py”,第 335 行
  文件“build/bdist.linux-i686/egg/simplejson/decoder.py”,第 351 行,在 raw_decode
ValueError: Expecting , delimiter: line 1 column 14 (char 14)

如何在 Python 中解码这个 JSON 对象?PHP 和 JS 都成功解码了它,我不能改变它的结构,因为这需要用不同的语言对许多不同的组件进行重大更改。

谢谢!

4

3 回答 3

9

尝试用 'r' 为您的字符串添加前缀以使其成为原始字符串:

# Python 2.6.2
>>> import json
>>> s = r'{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}'
>>> json.loads(s)
{u'a': {u'a1': u'{"foo":"bar","foo1":"bar1"}'}}

亚历克斯在下面说的是真的:你可以把斜线加倍。(当我开始我的工作时,他的答案没有发布。)我认为使用原始字符串更简单,因为它是一种语言功能,意味着同样的事情,而且更难出错。

于 2009-08-04T23:38:45.040 回答
1

尝试

也许 simplejson 太“简单”了。

于 2009-08-04T23:19:57.107 回答
1

如果你想在字符串中插入反斜杠,他们需要自己转义。

import simplejson as json
json.loads('{"a":{"a1":"{\\"foo\\":\\"bar\\",\\"foo1\\":\\"bar1\\"}"}}')

我已经对其进行了测试,Python 可以很好地处理该输入——除了我使用了标准库中包含的 json 模块(import jsonPython 3.1)。

于 2009-08-04T23:35:09.073 回答