Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON解析-名称内的单引号_Javascript_Json - Fatal编程技术网

Javascript JSON解析-名称内的单引号

Javascript JSON解析-名称内的单引号,javascript,json,Javascript,Json,在Django模板中,我打印了如下数据: P.place = '{{place.json|safe}}'; 然后在JavaScript文件中,我将其按如下方式进行裁剪: place = JSON.parse(P.place); {"category": "Cars", "name": "Z"} P.place = '{"category": "Cars", "name": "Z"}' {"category": "Cars", "name": "Wojtek's Z"} '{"categ

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

P.place = '{{place.json|safe}}';
然后在JavaScript文件中,我将其按如下方式进行裁剪:

place = JSON.parse(P.place);
{"category": "Cars", "name": "Z"}
P.place = '{"category": "Cars", "name": "Z"}'
{"category": "Cars", "name": "Wojtek's Z"}
'{"category": "Cars", "name": "Wojtek'
对于这样的数据,一切都很好:

place = JSON.parse(P.place);
{"category": "Cars", "name": "Z"}
P.place = '{"category": "Cars", "name": "Z"}'
{"category": "Cars", "name": "Wojtek's Z"}
'{"category": "Cars", "name": "Wojtek'
因为字符串如下所示:

place = JSON.parse(P.place);
{"category": "Cars", "name": "Z"}
P.place = '{"category": "Cars", "name": "Z"}'
{"category": "Cars", "name": "Wojtek's Z"}
'{"category": "Cars", "name": "Wojtek'
所以,我可以使用JSON.parse方法来解析它,该方法接受字符串作为输入

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

place = JSON.parse(P.place);
{"category": "Cars", "name": "Z"}
P.place = '{"category": "Cars", "name": "Z"}'
{"category": "Cars", "name": "Wojtek's Z"}
'{"category": "Cars", "name": "Wojtek'
因为JSON解析器的输入字符串如下所示:

place = JSON.parse(P.place);
{"category": "Cars", "name": "Z"}
P.place = '{"category": "Cars", "name": "Z"}'
{"category": "Cars", "name": "Wojtek's Z"}
'{"category": "Cars", "name": "Wojtek'
我不能在JSON字符串中转义单引号,因为这样JSON字符串就无效了。出于同样的原因,我不能在JSON字符串中用双引号和转义双引号替换周围的引号

我的解决方案如下所示:

place = JSON.parse(P.place);
{"category": "Cars", "name": "Z"}
P.place = '{"category": "Cars", "name": "Z"}'
{"category": "Cars", "name": "Wojtek's Z"}
'{"category": "Cars", "name": "Wojtek'
在HTML模板中:

P.place = {{place.json|safe}};
然后在JavaScript中

var place = JSON.stringify(P.place);
place = JSON.parse(place);
这是可行的,但它不是IMHO的最佳解决方案


如何更有效地解决这个问题?

我可以想到两种可能性:

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

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

谢谢你的回答!然而,我认为这个解决方案比我的开销更大。顺便说一句,我们不能在脚本元素中使用id。为什么不能在脚本元素中使用id?有关脚本元素中的id的信息。此外,我认为这两种方法的开销都比字符串化然后重新解析JSON要小,不过您当然应该进行基准测试并查看。如果您需要HTML 100%符合规范,您可以使用我提供的第二种解决方案。(顺便说一句,这是我在代码中使用的解决方案)我用div标记包装脚本,然后用$('#place json script').text();您必须在JSON中引用撇号,这是无法避免的。但如果使用“\”定义对象,通常可以对其进行转义。或者,如果您愿意,可以使用unicode escape\u0027(我想)。您不能这样做,请查看jsonlint.com和json.org您不能做什么?查看json规范。不能引用单撇号。第2行的解析错误:{“ff”:“f\f”},因此我无法使用您的命题解决我的问题。