Как добавить значения в полусложный объект JSON? - PullRequest
0 голосов
/ 21 марта 2012

Я довольно новичок в использовании объектов JSON и немного застрял.

У меня есть объект JSON, который был преобразован из этого массива:

Array
(
    [status] => success
    [id] => 1
    [name] => Zone 1
    [description] => Awesome zone deze..
    [tiles] => Array
    (
        // Column for the tile grid
        [0] => Array
            (
                // Row for the tile grid
                [0] => Array
                    (
                        [tileID] => 1
                        [rotation] => 0
                    )
                [1] => Array
                    (
                        [tileID] => 1
                        [rotation] => 0
                    )
                // Etc..
            )
        [1] => Array // etc.. etc..
    )
)

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

Вот как я бы сделал это в PHP:

mapData[column][row] = array(
    'tileID' => 1,
    'rotation' => 0
);

Итак, мой вопрос: как мне достичь этого с помощью объекта JSON в javascript?

Заранее спасибо!

Ник

Обновление

Я столкнулся с ошибкой:

can't convert undefined to object
mapDataTiles[mouseY][mouseX] = { tileID: editorSelectedTile, rotation: 0 };

Это код, который я использую для нажатия и сохранения новой плитки в объект JSON. Сначала я подумал, что один из моих параметров был «неопределен», поэтому я записал их в консоль, но они вышли идеально ..

// If there is already a tile placed on these coordinates
if( mapDataTiles[mouseX] && mapDataTiles[mouseX][mouseY] )
{
    mapDataTiles[mouseX][mouseY]['tileID'] = editorSelectedTile;
}
// If there is no tile placed on these coordinates
else
{
    mapDataTiles[mouseX][mouseY] = { tileID: editorSelectedTile, rotation: 0 };
}

Мои переменные имеют следующие значения:

MouseX: 5
MouseY: 17 
tileID: 2

Также странный факт, что для некоторых координат он действительно работает и сохраняет новые данные в массив.

ОБНОВЛЕНИЕ 2

После нескольких часов проб и кодирования ошибок я нашел решение!

Спасибо за помощь всем!

Если кому-то интересно, я буду рад показать мой код. Пока что у меня есть возможность расширять карту мира в любом направлении для неограниченного количества плиток. : D

Cya

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

Если вы хотите добавить строку:

mapData.tiles.push([
{
    'tileID': 1,
    'rotation': 0
},
{
    'tileID': 3,
    'rotation': 0
}]);

Если вы хотите добавить столбец в существующую строку:

mapData.tiles[row].push({
    'tileID': 1,
    'rotation': 0
});
0 голосов
/ 21 марта 2012

Ну, примерно так же. Объект JavaScript - это одна из самых простых вещей, которую можно изменить:)

jsonObject.tiles[column][row] = {tileID: 1, rotation: 0};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...