在PHP中解析和搜索JSON 搜索

问题描述

我需要一些帮助来解析和使用PHP浏览JSON结果。在下面的示例结果中,我需要检查技术的类别。

我希望得到的结果是,如果找到了类别分析,则使用真实变量进行标记,并使用分析名称(例如“ Google Analytics”)设置变量

这是示例代码

foreach ($resp['technologies'] as $item) {
    if ($item['categories'][0] === 'analytics') {
        $found = true;
        $analyticsis= $item['name'];

这是我们正在浏览的示例JSON。

[{
    "url": "https://www.websiteexample.co.uk","technologies": [{
      "slug": "google-analytics","name": "Google Analytics","versions": [],"trafficRank": 0,"categories": [{
          "id": 10,"slug": "analytics","name": "Analytics"
        },{
          "id": 61,"slug": "saas","name": "SaaS"
        }
      ]
    }

解决方法

首先,json是一个字符串。
如果您有json,则应对其进行解析:

$data = json_decode($json,true);

如果“ json”是数组,则不是json,而是数组。


搜索

只需遍历您的结构,找到所需的内容后,停止并保存所有必要的数据:

$json = <<<'JSON'
[{
    "url": "https://www.websiteexample.co.uk","technologies": [{
      "slug": "google-analytics","name": "Google Analytics","categories": [
        {"id": 10,"slug": "analytics","name": "Analytics"},{"id": 61,"slug": "saas","name": "SaaS"}
      ]
    }]
}]
JSON;

$data = json_decode($json,true);

$needle = 'analytics';
$foundTech = null;
$foundCategory = null;
foreach ($data as $resp) {
  foreach ($resp['technologies'] as $tech) {
    foreach ($tech['categories'] as $category) {
      if ($category['slug'] === $needle) {
        $foundTech = $tech;
        $foundCategory = $category;
        break 3;
      }
    }
  }
}
if ($foundCategory) {
  echo $foundTech['name'],PHP_EOL;
  echo $foundCategory['name'],PHP_EOL;
}
Google Analytics
Analytics

如果您需要在该结构中进行多个搜索,最好先创建一些地图/索引。

,

$item['categories'][0]是一个关联数组,analyticsslug元素中。

if ($item['categories'][0]['slug'] == 'analytics') {
    $found = true;
    $analyticsis = $item['name'];
}

您可能应该搜索所有类别,而不仅仅是选中[0]

foreach ($item['categories'] as $category) {
    if ($category['slug'] == 'analytics') {
        $found = true;
        $analyticsis = $item['name'];
        break;
    }
}