我正在尝试从此JSON响应中获取所有Google字体 family 值:
{
"kind": "webfonts#webfontList",
"items": [
{
"kind": "webfonts#webfont",
"family": "ABeeZee",
"category": "sans-serif",
"variants": [
"regular",
"italic"
],
"subsets": [
"latin"
],
"version": "v10",
"lastModified": "2017-08-24",
"files": {
"regular":
"http://fonts.gstatic.com/s/abeezee/v10/mE5BOuZKGln_Ex0uYKpIaw.ttf",
"italic":
"http://fonts.gstatic.com/s/abeezee/v10/kpplLynmYgP0YtlJA3atRw.ttf"
}
},
...
]
我使用它来得到上述答案:
$url = 'https://www.googleapis.com/webfonts/v1/webfonts?key=My key';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
curl_close($ch);
$fonts = json_decode($result, true);
如何遍历每个项目以获取所有系列的列表?
答案 0 :(得分:0)
如果使用jq在json中输出,则从命令行可以使用:
curl <url> | jq '.items[].family'
通过使用PHP,这可能有效:
$fonts = json_decode($result, true);
$families = array();
foreach($fonts as $key =>$value) {
if ($key == "items") {
foreach($value[0] as $k =>$v) {
if ($k == "family") {
array_push($families, $v);
}
}
}
}
所有系列都将存储在$families
数组中。
答案 1 :(得分:0)
显然,可以声明一个数组,使用foreach循环遍历项目并将族推送到数组上,但有更简单的技术。
一种方法是使用array_column()来处理循环结果。
注意:此代码不会将结果解码为关联数组(通过传递json_decode()参数true
的{{1}}) - 而是使用将结果解码为对象,并通过利用property_exists()确保存在名为 items 的属性。然而,可以保留关联数组语法并使用array_key_exists()确保关键项存在。
$assoc
参见this playground example中的演示。
或者对于功能方法,请使用array_map()
$fonts = json_decode($result);
if (is_object($fonts) && property_exists($fonts, 'items')){
$familyValues = array_column($fonts->items, 'family');
}