PHP Как получить конкретные значения / параметр JSON - PullRequest
0 голосов
/ 24 мая 2018

Это мой ответ JSON от URL API.Для управления я использую GuzzleHttp\Client и json_decode().

[{
    "INDEX_ID": "0",
    "NOTES": "0; Farming"
},
{
    "INDEX_ID": "1",
    "NOTES": "Fruit Name; List of Fruits;"
},
{
    "INDEX_ID": "2",
    "NOTES": "Apple"
},
{
    "INDEX_ID": "3",
    "NOTES": "Orange"
},
{
    "INDEX_ID": "4",
    "NOTES": "Grapes"
},
{
    "INDEX_ID": "5",
    "NOTES": "Mango"
},
{
    "INDEX_ID": "6",
    "NOTES": "Animal Name; List of Animal;"
},
{
    "INDEX_ID": "7",
    "NOTES": "Pig"
},
{
    "INDEX_ID": "8",
    "NOTES": "Goat"
},
{
    "INDEX_ID": "9",
    "NOTES": "Cow"
}]

Но мне нужно только сохранить список фруктов в моем лог-файле.Может кто-нибудь помочь мне, как исключить другие параметры json и получить только определенные параметры json, используя foreach loop или любой метод метода для получения этого результата.

Я просто хочу, чтобы это было так:

[
{
    "NOTE_NO." : "001",
    "CATEGORY" : "FRUITS",
    "LISTS_TO_BUY" : [
    {
        "FRUITS": "Apple"
    },
    {
        "FRUITS": "Orange"
    },
    {
        "FRUITS": "Grapes"
    },
    {
        "FRUITS": "Mango"
    }
    ]
 }
 ]

Пока он мой код:

        $response_body = json_decode($json_response, true);
        $json_new_param = [];

        foreach ($response_body as $value) {
            $json_new_param[] = [
                'FRUITS' => $value['NOTES']
            ];
        }
        $header = [
            [
                'NOTE_NO.' => '001',
                'CATEGORY' => 'FRUITS',
                'LISTS_TO_BUY' => $json_new_param
            ]
        ];
        echo json_encode($header);

$json_response - ответ, приведенный выше.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете использовать array_reduce для возврата массива, где ключом будет первое слово из значения, используя implode , который имеет такую ​​структуру: "NOTES": "Fruit Name; List of Fruits;".Ключом для этого будет тогда «Фрукты».

Во время array_reduce отслеживайте текущий ключ, используя переменную $currKey

В конце вы можете получить данные, используя «ФРУКТЫ "(которое является первым словом) в качестве ключа массива: $response_body["FRUIT"]

$response_body = json_decode($json_response, true);
$currKey = "0";

$response_body = array_reduce($response_body, function ($carry, $item) use (&$currKey){
    if (strpos($item['NOTES'], 'Name; List') !== false) {
        $currKey = strtoupper(explode(" ", $item["NOTES"], 2)[0]);
        return $carry;
    }
    $carry[$currKey][] = ["FRUITS" => $item["NOTES"]];
    return $carry;
});

$result = [
    [
        "NOTE_NO" => "001",
        "CATEGORY" => ($name = "FRUITS"),
        "LISTS_TO_BUY" => $response_body["FRUIT"]
    ]
];
echo json_encode($result, JSON_PRETTY_PRINT);

Это приведет к:

[
    {
        "NOTE_NO": "001",
        "CATEGORY": "FRUITS",
        "LISTS_TO_BUY": [
            {
                "FRUITS": "Apple"
            },
            {
                "FRUITS": "Orange"
            },
            {
                "FRUITS": "Grapes"
            },
            {
                "FRUITS": "Mango"
            }
        ]
    }
]

Демо

0 голосов
/ 24 мая 2018

Попробуйте этот код.

$json_new_param = [];
$fruitFlag = false;
foreach ($response_body as $value) {

    if(strpos($value['NOTES'],'Fruit Name') !== false){
        $fruitFlag = true;
        continue;
    }
    if(strpos($value['NOTES'],'Animal Name') !== false){
        $fruitFlag = false;    
    }

    if($fruitFlag == true){
        $json_new_param[] = [
        'FRUITS' => $value['NOTES']
        ];    
    }

}


echo json_encode($json_new_param, JSON_PRETTY_PRINT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...