我有一个json文件,我正在读取网址的内容。我想只解析一个特定的对象/段,单独存储然后显示它。
.Json
{
"playerstats": {
"id": "adwawdawdawdawd",
"game": "123324234",
"stats": [
{
"name": "tk",
"value": 57656
},
{
"name": "td",
"value": 38439
},
{
"name": "ttp",
"value": 2659434
},
{
"name": "tpb",
"value": 847
},
]
"achievements": [
{
"name": "wbp",
"achieved": 1
},
{
"name": "bpl",
"achieved": 1
},
{
"name": "bdl",
"achieved": 1
},
{
"name": "kel",
"achieved": 1
}
]
}
}
所以我想要一个单独的“Stats”数组和一个用于“成就”的独立数组。
然后我可以循环并得到像这样的输出
Stats: name, value
name, value
name, value
...
Achievements: name, achieved
name, achieved
name, achieved
...
.PHP Attempt
$url = "insertjsonUrlHere";
$jsonFile = file_get_contents($url);
$obj = json_decode($jsonFile, true);
$stats = $obj->playerstats->stats;
$achievements = $obj->playerstats->achievements;
foreach ($stats as $key => $value) {
echo $key." ".$value."<br />";
}
foreach ($achievements as $key => $value) {
echo $key." ".$value."<br />";
}
答案 0 :(得分:1)
您的JSON格式不正确。测试您的JSON Here(它显示格式错误的行)
如果未正确形成JSON文件,则json_decode
将返回NULL
。
在更正您的JSON之后,此PHP代码按预期工作 -
$url = "insertjsonUrlHere";
$jsonFile = file_get_contents($url);
$obj = json_decode($jsonFile, true);
$stats = $obj['playerstats']['stats'];
$achievements = $obj['playerstats']['achievements'];
foreach ($stats as $v) {
echo $v['name']." ".$v['value']."<br />";
}
foreach ($achievements as $v) {
echo $v['name']." ".$v['achieved']."<br />";
}
/*
OUTPUT
*/
tk 57656
td 38439
ttp 2659434
tpb 847
wbp 1
bpl 1
bdl 1
kel 1
修改强>
如果要按名称访问$stat
的值,则此函数应该起作用 -
function get_stats_value($stats, $name){
foreach ($stats as $v) {
if($v['name'] == $name){
return $v['value'];
}
}
return false;
}
$val = get_stats_value($stats, "tk");
var_dump($val);
//OUTPUT -> int 57656
答案 1 :(得分:0)
你正在使用带有'true'标志的json_decode,这意味着你得到一个数组而不是一个对象。因此,为了访问您的值,请将代码更改为以下内容:
$stats = $obj['playerstats']['stats'];
$achievements = $obj['playerstats']['achievements‘];
答案 2 :(得分:0)
看看这是否有效。你也许可以用array_walk做一个版本。
$stats = array();
foreach($obj->playerstats->stats as$a){
$stats[$a['name']] = $a['value'];
}
$achievements = array();
foreach($obj->playerstats->achievements as $a){
$achievements[$a['name']] = $a['achieved'];
}