Как правильно отформатировать WP_REST_Response в json и получить массивы вместо объектов? - PullRequest
0 голосов
/ 27 мая 2019

Я создаю очень маленькое приложение в WordPress и мне нужно получать данные JSON через AJAX. Я сталкиваюсь со странной (по крайней мере для меня) проблемой. Мой оригинальный журнал данных выглядит следующим образом (обратите внимание на элементы и детей> они являются массивами):

object(stdClass)#6740 (2) {
  ["type"]=>
  string(5) "areas"
  ["items"]=>
  array(1) {
    [92]=>
    object(stdClass)#6742 (10) {
      ["term_id"]=>
      int(92)
      ["name"]=>
      string(6) "Italia"
      ["slug"]=>
      string(6) "italia"
      ["term_taxonomy_id"]=>
      int(92)
      ["taxonomy"]=>
      string(12) "dealer_areas"
      ["description"]=>
      string(0) ""
      ["parent"]=>
      int(82)
      ["count"]=>
      int(1)
      ["term_order"]=>
      float(0.1)
      ["children"]=>
      array(1) {
        [126]=>
        object(stdClass)#6741 (10) {
          ["term_id"]=>
          int(126)
          ["name"]=>
          string(8) "Sardegna"
          ["slug"]=>
          string(8) "sardegna"
          ["term_taxonomy_id"]=>
          int(126)
          ["taxonomy"]=>
          string(12) "dealer_areas"
          ["description"]=>
          string(0) ""
          ["parent"]=>
          int(92)
          ["count"]=>
          int(1)
          ["term_order"]=>
          float(0.10003)
          ["children"]=>
          array(0) {
          }
        }
      }
    }
  }
}

Если я передам его непосредственно WP_REST_Response, а затем js как ответ json (return new WP_REST_Response($response_obj)), я получу журнал, подобный этому:

enter image description here

Как видите, это не совсем json ... Существуют методы получения / установки ..

ОК, тогда я передаю значение, закодированное в json (return new WP_REST_Response(json_encode($response_obj))), и анализирую в javascript через JSON.parse(). Я получаю это:

enter image description here

или этот (другой пример с более чем 1 объектом)

enter image description here

Как видите, я получаю json, но даже если данные оригинальных элементов были массивом, теперь я получаю объект. Как сохранить исходный тип массива?

1 Ответ

0 голосов
/ 27 мая 2019

Мой собственный ответ:

  1. Это не проблема WP_REST_Response.
  2. Это не проблема json_decode
  3. Проблема заключается в формате данных и способе JavaScriptчитает массивы

Короче говоря: невозможно преобразовать непоследовательные индексированные массивы php в массивы javascript, так как javascript требует последовательных целочисленных ключей.Во всех других случаях javascript читается как ассоциативные массивы или объекты (которые по сути одинаковы).Следовательно, json преобразование непоследовательных индексированных массивов php всегда будет выводить объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...