Как мне кодировать массив PHP в массив JSON, а не в объект? - PullRequest
8 голосов
/ 26 марта 2009

Я пытаюсь json_encode массива, который возвращается из запроса Zend_DB.

var_dump дает: (добавление 0 членов вручную не меняет картинку.)

array(3) {
  [1]=>
  array(3) {
    ["comment_id"]=>
    string(1) "1"
    ["erasable"]=>
    string(1) "1"
    ["comment"]=>
    string(6) "test 1"
  }
  [2]=>
  array(3) {
    ["comment_id"]=>
    string(1) "2"
    ["erasable"]=>
    string(1) "1"
    ["comment"]=>
    string(6) "test 1"
  }
  [3]=>
  array(3) {
    ["comment_id"]=>
    string(1) "3"
    ["erasable"]=>
    string(1) "1"
    ["comment"]=>
    string(6) "jhghjg"
  }
}

Кодированная строка выглядит следующим образом:

{"1":{"comment_id":"1","erasable":"1","comment":"test 1"},
 "2":{"comment_id":"2","erasable":"1","comment":"test 1"},
 "3":{"comment_id":"3","erasable":"1","comment":"jhghjg"}}

Что мне нужно, это:

[{"comment_id":"1","erasable":"1","comment":"test 1"},
{"comment_id":"2","erasable":"1","comment":"test 1"},
{"comment_id":"3","erasable":"1","comment":"jhghjg"}]

Именно так и должна выглядеть документация php.ini / json_encode.

Ответы [ 4 ]

12 голосов
/ 26 марта 2009

Как вы настраиваете свой начальный массив?

Если вы установите его как:

array(
 "1" => array(...),
 "2" => array(...),
);

тогда у вас нет массива с числовыми индексами, кроме строк, и он преобразуется в объект в мире JS. Это может также произойти, если вы не установили строгий порядок (т. Е. Начинающийся с 0 вместо 1).

Однако, это выстрел в темноте, потому что я не вижу вашего исходного кода: попробуйте сначала установить массив без использования ключей:

array(
 array(...),
 array(...),
);
6 голосов
/ 26 марта 2009

Добавлена ​​информация, расширяющая ответ Seb .

php > print json_encode( array( 'a', 'b', 'c' ) ) ;
["a","b","c"]
php > print json_encode( array( 0 => 'a',  1 => 'b', 2 => 'c' ) ) ;
["a","b","c"]
php > print json_encode( array( 1 => 'a',  2 => 'b', 3 => 'c' ) ) ;
{"1":"a","2":"b","3":"c"}
php > 

Примечание: форматирование выполняется по уважительной причине:

Если бы вы отправили

{"1":"a","2":"b","3":"c"}

как

["a","b","c"]

Когда вы делали $data[1] в Php, вы возвращали "a", но на стороне JavaScript вы возвращались "b".

2 голосов
/ 26 марта 2009

Обычный способ проверки традиционного непрерывного массива в php - это проверка индекса '0'. Попробуйте добавить это в ваш массив, он, вероятно, будет считать его массивом вместо hashmap.

0 голосов
/ 08 июня 2010

У меня была похожая проблема, она заработала после добавления '' (одинарные кавычки) вокруг строки json_encode. Исходя из моего файла JS:

var myJsVar =  <?php echo json_encode($var); ?> ;    -------> NOT WORKING  
var myJsVar = '<?php echo json_encode($var); ?>' ;   -------> WORKING
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...