JSON.parse "строка" - PullRequest
       8

JSON.parse "строка"

0 голосов
/ 18 октября 2019

Я пытаюсь передать 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 ]

1 голос
/ 18 октября 2019

В идеале вы хотите, чтобы серверная часть не кодировала 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);
0 голосов
/ 18 октября 2019

Вы можете сделать вместо 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...