2014-07-25 68 views
2

我想重複的JSON(球員和建築物)兩個指標,這樣我可以一個在得到新的結果jQuery的如何合併JSON兩個指標,然後解析信息

我有兩個指標JSON其中具有玩家的信息和具有建築相關玩家的信息的第二索引。

我想解析它,以便我可以得到Player及其建築物名稱。

我的實際JSON結果

{ 
     "Players": [ 
      { 
       "id": "35", 
       "building_id": "8", 
       "room_num": "101", 
      }, 
      { 
       "id": "36", 
       "building_id": "9", 
       "room_num": "102", 
      }, 
      { 
       "id": "37", 
       "building_id": "10", 
       "room_num": "103", 
      }, 
      { 
       "id": "38", 
       "building_id": "11", 
       "room_num": "104", 
      } 
     ], 
     "Buildings": [ 
      { 
       "id": "8", 
       "name": "ABC" 
      }, 
      { 
       "id": "9", 
       "name": "DEF" 
      }, 
      { 
       "id": "10", 
       "name": "GHI" 
      }, 
      { 
       "id": "11", 
       "name": "JKL" 
      } 
     ] 
    } 

需要此

"information": [ 
       { 
        "player_id": "35", 
        "Buildings_name": "ABC" 
       }, 
       { 
        "player_id": "36", 
        "Buildings_name": "DEF" 
       }, 
       { 
        "player_id": "37", 
        "Buildings_name": "GHI" 
       }, 
       { 
        "player_id": "38", 
        "Buildings_name": "JKL" 
       } 
      ] 
     } 
+0

你爲什麼不鏈接的信息數據庫端的字段? – kiks73

+0

嗯好的。謝謝你的建議。我沒有在DB Side嘗試過。 –

回答

3

在這裏你去,這去爲每一個玩家,並檢查是否有建築物,並將它們映射到新結構。這不會過濾未映射到玩家的建築物的值,也不會包含沒有玩家的建築物。

var x = { 
    "Players": [ 
     { 
      "id": "35", 
      "building_id": "8", 
      "room_num": "101", 
     }, 
     { 
      "id": "36", 
      "building_id": "9", 
      "room_num": "102", 
     }, 
     { 
      "id": "37", 
      "building_id": "10", 
      "room_num": "103", 
     }, 
     { 
      "id": "38", 
      "building_id": "11", 
      "room_num": "104", 
     } 
    ], 
    "Buildings": [ 
     { 
      "id": "8", 
      "name": "ABC" 
     }, 
     { 
      "id": "9", 
      "name": "DEF" 
     }, 
     { 
      "id": "10", 
      "name": "GHI" 
     }, 
     { 
      "id": "11", 
      "name": "JKL" 
     } 
    ] 
}; 

var res = $.map(x.Players, function(item) { 
    return { 
     player_id: item.id, 
     building_name: $.grep(x.Buildings, function(i) { 
      return i.id == item.building_id 
     }).length != 0 ? $.grep(x.Buildings, function(i) { 
      return i.id == item.building_id 
     })[0].name : undefined 
    } 
}) 

,如果要篩選沒有關係值如INNER JOIN

var resInnerJoin = $.grep($.map(x.Players, function(item) { 
    return { 
     player_id: item.id, 
     building_name: $.grep(x.Buildings, function(i) { 
      return i.id == item.building_id 
     }).length != 0 ? $.grep(x.Buildings, function(i) { 
      return i.id == item.building_id 
     })[0].name : undefined 
    } 
}), function(it) { 
    return it.building_name != undefined 
}) 
+0

好的謝謝你。它給了我 building_id和player_id。但需要建築物名稱而不是建築物編號 –

+0

@騎自行車的人修好了,對不起。 –

1

如果您需要在PHP:

$json = '{...}'; 

// create and PHP array with you json data. 
$array = json_decode($json, true); 

// make an array with buildings informations and with building id as key 
$buildings = array(); 
foreach($array['Buildings'] as $b) $buildings[$b['id']] = $b; 


$informations = array(); 

for ($i = 0 ; $i < count($array['Players']) ; $i++) 
{ 
    $informations[$i] = array(
     'player_id' => $array['Players'][$i]['id'], 
     'Buildings_name' => $buildings[$array['Players'][$i]['building_id']]['name'] 
    ); 
} 

$informations = json_encode($informations); 

var_dump($informations); 
+0

很好謝謝你的建議。我會嘗試.. :),我認爲這可能會在服務器端更好。 –

+0

嗨djidi我們可以聊天嗎? ..我需要幫助你的代碼..它的漂亮,太漂亮的代碼。 –