JSON.parse解析“串

时间:2019-10-18 07:51:53

标签: javascript php json twig

我正在尝试通过PHP控制器将JSON字符串传递给树枝模板:

$data['dist_result'] = json_encode($distribution_service->setDistribution($ids,$distribution));
$this->display('backend/shipments/distributor_selection.twig', $data);

这是树枝模板上的javascript:

{% block javascripts %}
    <script>
        var dist_result = "{{ dist_result }}";
        //var dist_result = dist_result.replace("&quot;","\"");
        console.log(dist_result);
        var data = JSON.parse(dist_result);
        console.log(data);
    </script>
{% endblock %}

它不能与替换或没有替换一起使用。

这是您的JSON字符串:

[
  [
    1,
    &quot;Mujer&quot;,
    &quot;18-50&quot;,
    1,
    &quot;Zona1-Noreste&quot;,
    &quot;2&quot;,
    1,
    1,
    1
  ],
  [
    2,
    &quot;Hombre&quot;,
    &quot;18-50&quot;,
    1,
    &quot;Zona1-Noreste&quot;,
    &quot;2&quot;,
    0,
    0,
    2
  ],...

2 个答案:

答案 0 :(得分:1)

理想情况下,您希望服务器端不对结果进行html编码。

但是,如果不可能做到这一点,那么一种简单的方法就是让浏览器对其进行解码。

例如。

var txt = `[
  [
    1,
    &quot;Mujer&quot;,
    &quot;18-50&quot;,
    1,
    &quot;Zona1-Noreste&quot;,
    &quot;2&quot;,
    1,
    1,
    1
  ],
  [
    2,
    &quot;Hombre&quot;,
    &quot;18-50&quot;,
    1,
    &quot;Zona1-Noreste&quot;,
    &quot;2&quot;,
    0,
    0,
    2
  ]
]`;

var b = document.createElement("div"); 
b.innerHTML = txt;
var j = JSON.parse(b.innerText);
console.log(j);

答案 1 :(得分:0)

您可以使用dist_result.replace("&quot;","\"")代替dist_result.replace(/&quot;/g, '"')

查看有关String.prototype.replace()

的更多信息

代码:

var dist_result = `[
  [
    1,
    &quot;Mujer&quot;,
    &quot;18-50&quot;,
    1,
    &quot;Zona1-Noreste&quot;,
    &quot;2&quot;,
    1,
    1,
    1
  ],
  [
    2,
    &quot;Hombre&quot;,
    &quot;18-50&quot;,
    1,
    &quot;Zona1-Noreste&quot;,
    &quot;2&quot;,
    0,
    0,
    2
  ]
]`;
var dist_result_replaced = dist_result.replace(/&quot;/g, '"');
var dist_result_parsed = JSON.parse(dist_result_replaced);

console.log(dist_result_parsed);