Получение определенных c данных из файла json с использованием php - PullRequest
0 голосов
/ 26 мая 2020

Привет, у меня есть файл json, и я хочу извлечь из него некоторые данные, файл выглядит следующим образом:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 4.0201406,
    "hits" : [
      {
        "_index" : "catalogue",
        "_type" : "_doc",
        "_id" : "p95iEXIBfVAlCluoT3sT",
        "_score" : 4.0201406,
        "_source" : {
          "categorie" : "Bonbons ",
          "marque" : "TIC TAC",
          "nom" : "bonbon duo TIC TAC"
        }
      },
      {
        "_index" : "catalogue",
        "_type" : "_doc",
        "_id" : "od5iEXIBfVAlCluoT3sT",
        "_score" : 3.6080353,
        "_source" : {
          "categorie" : "Bonbons",
          "marque" : "TIC TAC",
          "nom" : "Bonbons duo de fraises TIC TAC"
        }
      }
    ]
  }
}

Это результат запроса elasticserch, и мой вопрос: как я могу получить категорию ie, marque, nom и их значения из этого файла, используя php ?. Я попытался преобразовать этот результат в массив, я использовал json_decode (), но всегда получал null, тогда я использовал Service_ json () и решил проблему. После этого я получил этот результат, но теперь мне трудно получить некоторые специфические c данные, такие как категория ie, nom, marque и их значения, и я получил пустой результат. это мой php код:

array(1) {
  ["hits"]=>
  object(stdClass)#3 (1) {
    ["hits"]=>
    array(7) {
      [0]=>
      object(stdClass)#4 (2) {
        ["_id"]=>
        string(20) "kN5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#5 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(29) "Bonbons parfums fruits MENTOS"
        }
      }
      [1]=>
      object(stdClass)#6 (2) {
        ["_id"]=>
        string(20) "kd5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#7 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(21) "Bonbons menthe MENTOS"
        }
      }
      [2]=>
      object(stdClass)#8 (2) {
        ["_id"]=>
        string(20) "kt5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#9 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(37) "Bonbons caramel/chocolat blanc MENTOS"
        }
      }
      [3]=>
      object(stdClass)#10 (2) {
        ["_id"]=>
        string(20) "k95iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#11 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "Mentos"
          ["nom"]=>
          string(31) "Bonbons caramel/chocolat MENTOS"
        }
      }
      [4]=>
      object(stdClass)#12 (2) {
        ["_id"]=>
        string(20) "lN5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#13 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(28) "Bonbons menthe sucres MENTOS"
        }
      }
      [5]=>
      object(stdClass)#14 (2) {
        ["_id"]=>
        string(20) "ld5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#15 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(31) "Bonbons framboise orange MENTOS"
        }
      }
      [6]=>
      object(stdClass)#16 (2) {
        ["_id"]=>
        string(20) "lt5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#17 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(26) "Bonbons pomme verte MENTOS"
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 26 мая 2020

Вы можете использовать

1. Фильтрация ответов

параметр filter_path, который можно использовать для уменьшения количества ответов, возвращаемых Elasticsearch. Этот параметр принимает список фильтров, разделенных запятыми, выраженный точечной нотацией:

ex. filter_path = hits.hits._source

2. Фильтрация источника

_source: можно использовать для указания, какие поля должны быть возвращены. По умолчанию возвращаются все поля

GET <index_name>/_search?filter_path=hits.hits._source
{
  "query": {
    "match_all": {}
  },
  "_source": ["categorie","marque","nom"]
}

Результат

  "hits" : {
    "hits" : [
      {
        "_source" : {
          "categorie" : "Bonbons",
          "nom" : "Bonbons pomme verte MENTOS",
          "marque" : "MENTOS"
        }
      }
    ]
  }
}
...