【问题标题】:PHP How to get a particular JSON values/parameterPHP 如何获取特定的 JSON 值/参数
【发布时间】:2018-11-03 12:18:57
【问题描述】:

这是我的 JSON 响应来自 URL API。我使用GuzzleHttp\Clientjson_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 参数并使用foreach loop 或任何方法仅获取特定的 json 参数以获得该结果。

我只是希望它是这样的:

[
{
    "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 是上面给出的响应。

【问题讨论】:

  • 您好,您不能在您对 API 的初始请求中添加一些过滤器,以便仅获取水果或至少按类别分组的项目或类似的东西吗?因为在响应的当前状态下,我看不到任何可以帮助识别哪个中间件是水果的通用属性(当然除了它的名称)。
  • 你如何比较水果,你有另一组只包含水果的值吗?

标签: php arrays json laravel-5


【解决方案1】:

您可以使用array_reduce 返回一个数组,其中键将是使用implode 的值中的第一个单词,其结构如下:"NOTES": "Fruit Name; List of Fruits;"。关键是“水果”。

在 array_reduce 期间使用变量 $currKey 跟踪当前键

最后,您可以使用“FRUIT”(这是第一个单词)作为数组键来获取数据:$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"
            }
        ]
    }
]

Demo

【讨论】:

    【解决方案2】:

    试试这个代码。

    $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);
    

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多