JSON解析 - 名称中的单引号

时间:2011-11-04 16:38:16

标签: javascript json

在Django模板中,我打印出如下数据:

P.place = '{{place.json|safe}}';

然后在JavaScript文件中,我就像那样:

place = JSON.parse(P.place);

对于这样的数据,一切都很好:

{"category": "Cars", "name": "Z"}

因为字符串看起来像那样:

P.place = '{"category": "Cars", "name": "Z"}'

所以,我可以使用JSON.parse方法解析它,接受字符串作为输入。

问题是当我得到这样的数据时:

{"category": "Cars", "name": "Wojtek's Z"}

因为JSON解析器的输入字符串看起来像:

'{"category": "Cars", "name": "Wojtek'

我无法在JSON字符串中转义单引号,因为那时JSON字符串变得无效。出于同样的原因,我无法用双重替换周围的引号,并在JSON字符串中转义双引号。

我的解决方案看起来像这样:

在HTML模板中:

P.place = {{place.json|safe}};

然后在JavaScript中

var place = JSON.stringify(P.place);
place = JSON.parse(place);

它有效,但它不是最佳解决方案恕我直言。

如何以更多的方式解决这个问题?

1 个答案:

答案 0 :(得分:8)

我可以想到两种可能性:

创建类型为application/json的脚本元素,将模板数据注入其中,然后读取其数据,例如

<script id="place-json" type="application/json">
  {{place.json|safe}}
</script>
<script type="application/javascript">
  P.place = $('#place-json').text();
</script>

或者,在注入字符串之前手动转义单引号,例如。

simplejson.dumps(yourdata).replace("'", r"\'")