使用PHP获取JSON属性名称,后跟项目名称值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PHP获取JSON属性名称,后跟项目名称值相关的知识,希望对你有一定的参考价值。
我试图使用php解析JSON,然后打印父属性的名称,后跟项目。
这是JSON
{
"Specials": [{
"name": "Shirt","dsc":"cotton shirt",
"vari": [{ "name":"red", "price":25.80 },{ "name":"green", "price":26.50 }]
},
{
"name":"shorts","dsc":"one size","price":15.99
},
{
"name":"shoes","dsc":"black shoes",
"vari": [{ "name":"capri", "price":37.80 },{ "name":"shooters", "price":28.50 }]
}],
"Jumpers": [{
"name": "Glax Red","dsc":"thin lightweight","price":22.99
},
{
"name": "Bazoo Care","dsc":"ideal for winter","price":32.99
}]
}
我用了以下来迭代它:
$readjson = file_get_contents('products.json') ;
$data = json_decode($readjson);
foreach ($data as $products) {
foreach ($products as $product) {
echo $product->name."<br>".$product->dsc."<br>";
if (isset($product->price))
{
echo " ".$product->price."<br>";
}
else {
foreach ($product->vari as $var) {
echo $var->name." ".$var->price."<br/>";
}
}
输出是:
衬衫棉质衬衫红色25.8绿色26.5短裤一码15.99 ...
我想首先打印属性的名称然后显示其中的项目,它应该如下所示:
特价
衬衫棉质衬衫红色25.8绿色26.5
短裤一码15.99 ......
跳线
Glax Red轻薄22.99
Bazoo Care适合冬季32.99
我已经将它添加为外部嵌套循环:
foreach ($data as $products => $value) {
echo $products;}
但这只返回第一个对象名称。我怎样才能实现上述目标?
这是JSON的可视化。
答案
你几乎就在那里,你只需要在第一个循环中输出密钥名称,所以
foreach ($data as $products) {
是在Specials
等项目上循环的位。所以首先抓住foreach()
中的密钥,然后输出这个作为循环中的第一件事......
foreach ($data as $key => $products) {
echo $key."<br>";
(没有}
)会给......
Specials<br>Shirt<br>cot...
另一答案
将json
转换为数组并循环遍历它
$data = json_decode($readjson, true);
这里我们传递true
参数,这意味着没有对象的数组。
foreach($data as $key => $value){
foreach($value as $k => $v){
echo '<b>'.$v['name'].'</b> '.' '.$v['dsc'];
echo isset($v['price']) ? $v['price'] : ' ';
if(array_key_exists('vari', $v)){
$vari = array_column($v['vari'], 'price','name');
foreach($vari as $_k => $_v){
echo $_k.' '.$_v;
}
}
echo '<hr>';
}
}
结果:-
Shirt cotton shirt red 25.8green 26.5
shorts one size15.99
shoes black shoes capri 37.8shooters 28.5
Glax Red thin lightweight22.99
Bazoo Care ideal for winter32.99
以上是关于使用PHP获取JSON属性名称,后跟项目名称值的主要内容,如果未能解决你的问题,请参考以下文章