How do I add values to semi-complex JSON object?

Posted by Nick Verheijen on Stack Overflow See other posts from Stack Overflow or by Nick Verheijen
Published on 2012-03-21T10:57:25Z Indexed on 2012/03/21 11:29 UTC
Read the original article Hit count: 273

Filed under:
|
|
|

I'm fairly new to using JSON objects and I'm kinda stuck.

I've got an JSON object that was converted from this array:

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..
    )
)

I use this object to render out an isometric grid for my HTML5 Canvas game. I'm building a map editor and to put more tiles on the map, i'll have to add values to this json object.

This is how I would do it in PHP:

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

So my question is, how do I achieve this with a JSON object in javascript?

Thanks in advance!

Nick

Update

I've ran into an error:

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

This is the code i use for clicking & then saving the new tile to the JSON object. At first I though that one of my parameters was 'undefined', so i logged those to the console but they came out perfectly..

// 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 };
}

My variables have the following values:

MouseX: 5
MouseY: 17 
tileID: 2

Also weird fact, that for some coordinates it does actually work and save new data to the array.

mapDataTiles[mouseY][mouseX] = { tileID: editorSelectedTile, rotation: 0 };

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about JSON