2017-09-01 37 views
1

我試圖搜索JSON文件中的,並從同一對象返回不同的值。通過PHP中的JSON值檢索數據

的JSON看起來是這樣的:

{ 
    "source": { 
     "name": "source1", 
     "url": "https://someurl", 
     "apiKey": "someapi" 

    }, 
    "targets" : [ 
     { 
      "name" : "target1", 
      "url": "https://target1url", 
      "apiKey": "target1api" 

     }, 
     { 
      "name" : "target2", 
      "url": "https://target2url", 
      "apiKey": "target2api" 
     } 
    ] 
} 

我想按名稱搜索來檢索 「apiKey」 值。我知道這可以通過foreach()if聲明完成,但我無法獲得該值。我的PHP代碼是這樣的:

// get the json config file 
$json = file_get_contents('config.json'); 

// decode the JSON 
$config = json_decode($json, true); 

foreach ($config["targets"] as $key => $value) { 
    if ($value->name == "target1") { 
     echo $value->apiKey; 
    } 
} 

將「名稱」與其他屬性放在同一級別是不好的做法嗎?例如,「名稱」應該是父母名稱,而其他值是子女?或者,如果JSON沒問題,你能幫我理解爲什麼上述不起作用嗎?

+0

對不起忘了$配置申述//獲取JSON配置文件 $ JSON =的file_get_contents( 'config.json'); //解碼JSON $ config = json_decode($ json,true); – user1416876

回答

1

你的數據結構沒有問題。

你的代碼不工作的原因是你已經使用TRUE作爲json_decode($json, true);的第二參數將結構轉換爲數組,但是仍然將結果數據結構作爲對象進行尋址。只是刪除TRUE參數和所得到的PHP數據將保持爲對象,這樣

$f = file_get_contents('tst.json'); 

$json = json_decode($f); 
//print_r($json); 
foreach ($json->targets as $obj){ 
    if ($obj->name == 'target1') { 
     echo $obj->apiKey; 
    } 
} 
1

它的非對象,它的陣列。重寫你的循環。

foreach ($config["targets"] as $key => $value) { 
    if ($value['name'] == "target1") { 
     echo $value['apiKey']; 
    } 
}