簡體   English   中英

將PHP關聯數組轉換為JSON關聯數組

[英]Converting a PHP associative array to a JSON associative array

我正在使用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輸出不是數組的原因)。

數組('a','b','c')編碼為['a','b','c'],

也許轉換為object而不是array的原因是你將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"}

JavaScript對象屬性名稱可以是任何格式的字符串。 它們甚至可以只是數字(就像你的情況一樣)並且使用數字索引/鍵訪問它們沒有問題:

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

obj["1"]; // returns "foo"
obj[1]; // returns "foo" (1 will implicitly get cast to the string "1")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM