Преобразование ассоциативного массива PHP в ассоциативный массив JSON - PullRequest
3 голосов
/ 09 марта 2010

Я конвертирую справочную таблицу в PHP, которая выглядит следующим образом, в JavaScript, используя json_encode:

 AbilitiesLookup Object
(
[abilities:private] => Array
    (
        [1] => Ability_MeleeAttack Object
            (
                [abilityid:protected] => 
                [range:protected] => 1
                [name:protected] => MeleeAttack
                [ability_identifier:protected] => MeleeAttack
                [aoe_row:protected] => 1
                [aoe_col:protected] => 1
                [aoe_shape:protected] => 
                [cooldown:protected] => 0
                [focusCost:protected] => 0
                [possibleFactions:protected] => 2
                [abilityDesc:protected] => Basic Attack
            )
            .....snipped...

А в JSON это:

{"1":{"name":"MeleeAttack","fof":"2","range":"1","aoe":[null,"1","1"],"fp":"0","image":"dummy.jpg"},....

Проблема в том,Я получаю объект JS, а не массив, и идентификатор является числом.Я вижу два пути решения этой проблемы - либо найти способ доступа к JSON с помощью числа (которое я не знаю, как), либо сделать так, чтобы json_encode (или некоторые другие пользовательские функции кодирования) могли дать ассоциативный массив JavaScript.

(Да, мне довольно не хватает моего отдела JavaScript).

Примечание : вывод JSON не соответствует массиву - это потому, что я выполняю кодировку json вручнуюдля каждого элемента в нижнем индексе, перед тем, как поместить его в массив (с индексом в качестве ключа), а затем с помощью json_encode.Чтобы было ясно, число не является последовательным, потому что это ассоциативный массив (именно поэтому вывод JSON не является массивом).

Ответы [ 2 ]

12 голосов
/ 09 марта 2010

массив ('a', 'b', 'c') кодируется как ['a', 'b', 'c'],

Возможно, причина преобразования в объект вместо массива состоит в том, что вы индексируете свой массив php с 1, а не с 0

Я проверил и

<?php
echo json_encode(array('a', 'b', 'c'))."\n";
echo json_encode(array(0 => 'a', 'b', 'c'))."\n"; // same as above but explicit
echo json_encode(array(1 => 'a', 'b', 'c'))."\n";

дает

["a","b","c"]
["a","b","c"]
{"1":"a","2":"b","3":"c"}
9 голосов
/ 09 марта 2010

Имена свойств объектов JavaScript могут быть строками в любом формате. Они даже могут быть просто цифрами (как в вашем случае), и нет проблем с доступом к ним с помощью цифровых индексов / ключей:

var obj = {
    "1": "foo",
    "2": "bar"
};

obj["1"]; // returns "foo"
obj[1]; // returns "foo" (1 will implicitly get cast to the string "1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...