2012-03-21 5 views
0

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 객체를 가지고있다. 지도 편집기를 만들고 맵에 타일을 더 추가하려면이 json 객체에 값을 추가해야합니다.

이 내가 PHP에서 어떻게 할 것입니다 :

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

그래서 제 질문은, 어떻게 자바 스크립트에서 JSON 객체와이를 달성 할입니까?

미리 감사드립니다.

내가 오류로 실행 한

업데이트 :

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 

기묘한 사실, 일부 좌표의 경우 실제로 작동하고 배열에 새 데이터를 저장합니다.

UPDATE 시행 코딩 오류의 몇 시간 후 2

나는 해결책을 마련했습니다!

어쨌든 모두의 도움에 감사드립니다!

궁금하신 분은 내 코드를 기쁘게 보내주십시오. 지금까지 내가 가지고있는 것은 무제한의 타일을 위해 어떤 방향 으로든 세계지도를 확장 할 수있는 능력입니다. : D

cya

답변

0

물론 거의 같은 방식입니다. 자바 스크립트 객체를 사용하면 행을 추가하려면 간단한 것들 중 하나가 :

jsonObject.tiles[column][row] = {tileID: 1, rotation: 0}; 
+0

나는 그것을 시도했지만 이상한 오류가 발생했습니다. 너무 빨리 답변 주셔서 감사합니다! –

+1

열 또는 행 배열이 실제로 존재하는지 확인해야합니다. 동적으로 만들어지지 않습니다."else"절을 변경하여 배열 존재 여부를 확인하고, 존재하지 않으면 지정된 열/행에 배열을 만듭니다. – Saebekassebil

0

을 alterate하는 것입니다

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

기존 행에 열을 추가하려면 :

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

그러나 내가 좋아한다면 나는 더 이상 '칼럼'에 대한 통제권을 갖지 못한다. 권리? –

+0

그것이 행과 열을 만드는 방법입니다. 그들을 액세스하려면 Saebekassebil의 방법을 사용하십시오. –

+0

아니, 무슨 뜻인지 알지 못해. 만약 내가 그런 식으로 "mapData.tiles [행] .push (.."나는 중요한 [칼] 키를 제어 할 수있다. 내가 그것을 좋아한다면 그냥 한 열을 추가하고 그것을 제공합니다. mapData [row] = new Array(); mapData [row] [col] = {tileID : 1} –

관련 문제