簡體   English   中英

如何使用 PHP 和 json_decode 在循環中解碼 JSON?

[英]How to decode JSON in a loop using PHP and json_decode?

我有這樣的 json,從服務返回:

{
    "reports" : {
        "name" : "reports"
        "response" : {
            "build" : {
                "version" : "2.55.10.0",
                "name" : "reports-app"
            }
        },
        "status" : 200
    },
    "static-application" : {
        "name" : "static-application"
        "response" : {
            "app" : {
                "name" : "client-frontend",
                "description" : "Client Static"
            },
            "build" : {
                "version" : "2.55.10.0",
                "name" : "client-frontend"
            }
        },
        "status" : 200
    },
    "static-help" : {
        "name" : "static-help"
        "response" : {
            "app" : {
                "name" : "client-frontend",
                "description" : "Client Static"
            },
            "build" : {
                "version" : "2.55.8.0",
                "name" : "client-frontend"
            }
        },
        "status" : 200
    }
}

我正在嘗試使用 json_decode 對其進行解碼:

<?php

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, 'https://domainname/api/aggregate/info');
    $json = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($json, true);
        echo $data['reports']['name']." | ".$data['reports']['response']['build']['version']."<br \>";
        echo $data['static-application']['name']." | ".$data['static-application']['response']['build']['version']."<br \>";
        echo $data['static-help']['name']." | ".$data['static-help']['response']['build']['version'];
?>

作為回報,我有:

reports | 2.55.10.0
static-application | 2.55.10.0
static-help | 2.55.8.0

一切正常,但是當服務返回更多模塊時,我將不得不手動添加新的 echo 部分。

如何在循環中編寫相同的內容?

您可以使用foreach循環遍歷所有$data的模塊:

$data = json_decode($json, true);
foreach($data as $module => $data)
{
    if(isset($data[$module]['name']) && !empty($data[$module]['response']['build']['version']))
    {
        echo $data[$module]['name']." | ".$data[$module]['response']['build']['version']."<br \>";
    }
}

foreach允許您一次迭代單個元素,而無需手動處理它包含多少元素。

empty的 function 檢查數組中是否存在鍵,如果包含,則可能丟失或為空。

如果您想動態 output 的name和 JSON 部分的build version ,您可以使用foreach()循環遍歷所有項目:

$data = json_decode($json);

foreach ( $data as $key => $jsonData ) {
  echo $jsonData->name;
  echo " | ";
  echo $jsonData->response->build->version;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM