我正在使用json_encode将PHP中的查找表转换为JavaScript:
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输出不是数组的原因)。
答案 0 :(得分:12)
数组('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"}
答案 1 :(得分:9)
JavaScript对象属性名称可以是任何格式的字符串。它们甚至可以只是数字(就像你的情况一样),用数字索引/键访问它们没有问题:
var obj = {
"1": "foo",
"2": "bar"
};
obj["1"]; // returns "foo"
obj[1]; // returns "foo" (1 will implicitly get cast to the string "1")