Мне нужна помощь с синтаксическим анализом и просмотром результата JSON с помощью PHP. В приведенном ниже примере результата мне нужно сравнить категории технологии.
В результате, я ожидал, что, если аналитика категорий была найдена, пометить это с помощью истинной переменной, а также установить переменную с именем аналитики, например "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"
}
]
}
2 ответа
Прежде всего, 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]
является ассоциативным массивом, а analytics
находится в элементе slug
.
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;
}
}
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.