带有双引号的json_encode传入JSON.parse

时间:2015-11-25 22:31:44

标签: javascript php angularjs json

我已经看到这个问题多年来被问过这么多次了。在此期间,仍然无法询问是否有任何改进。

目前,我有PHP代码:

$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);

然后JS(Angular具体)开始发挥作用:

var decoded = angular.fromJson('<?php echo $jsonData ; ?>');

上面的标志可以很好地解决一些问题。但是,举个例子:

$data = ["name" => "Name \"Nickname\" Surname"];

JSON无法解析。如果我用addslashes()包装数据,它确实有用,那么:

$data = ["name" => "Name 'Nickname' Surname"];

这失败了。

由于结构$data高度不可预测,通常深度为4-5级,我的解决方案是:

array_walk_recursive($data, function(&$item, $key){
    $item = str_replace('"', '\"', $item);
});

这可行,但是,我正在寻找一些更有见识的来源。我已经阅读了其他一些SO问题,人们不仅可以使用双引号,还可以使用换行,回车和反斜杠。

我需要的最后一件事就是陷入边缘情况陷阱:)

对我有任何暗示吗?

1 个答案:

答案 0 :(得分:3)

由于json可以在javascript中直接用作对象文字,你可以像这样使用它:

var decoded = <?php echo $jsonData ; ?>;

因此无需进行任何进一步的解析以避免文本中的'\字符出现问题。 json_encode应该已经在处理"字符。