【问题标题】:PHP get json object name [duplicate]PHP获取json对象名称[重复]
【发布时间】:2017-04-06 23:25:30
【问题描述】:

我有这样的 json 数组

{
  "STATUS": "SUCCESS",
  "MESSAGE": "",
  "DATA": {
    "list": [
      {
        "val0": {
          "hidden": "0",
          "rate": "10"
        }
      },
      {
        "val1": {
          "hidden": "0",
          "rate": "20"
        }
      }
    ],
    "status": "Provisioned"
  }
}

我想得到DATA>list>的对象名。 我尝试使用get_class($list[0]),但输出为stdClass。输出应该是val0。我该如何尝试。请帮忙

【问题讨论】:

  • 解码json并循环数组
  • "Actually I want StdClass name." 请说明最终目标并从问题中删除您“实际上”不想要的任何内容。

标签: php


【解决方案1】:

使用json_decodelist也是一个数组,因此第一个key(0)代表val0,如果要获取val0的内部内容,则必须再次循环。

$data = '{
  "STATUS": "SUCCESS",
  "MESSAGE": "",
  "DATA": {
    "list": [
      {
        "val0": {
          "hidden": "0",
          "rate": "10"
        }
      },
      {
        "val1": {
          "hidden": "0",
          "rate": "20"
        }
      }
    ],
    "cpe_status": "Provisioned"
  }
}';

$data = json_decode($data, true);

foreach($data['DATA']['list'][0] as $key=>$value){
    echo $key; // return val0
    echo "<br/>";
    // to get val0 inner content
    foreach($value as $item=>$list){
        echo $item." - ".$list; // return val0 inner data
        echo "<br/>";   
    }
}

// alternative way for loop val0 inner content
foreach($data['DATA']['list'][0]['val0'] as $key=>$value){
    echo $key." - ".$value; // return val0 inner data
    echo "<br/>";   
}

【讨论】:

    【解决方案2】:

    希望下面的不言自明的片段可以为您提供有关如何自己动手做的提示。顺便说一句,你可以Quick-Test it Here

    <?php
    
            $strJson        = '{
                                          "STATUS"      : "SUCCESS",
                                          "MESSAGE"     : "",
                                          "DATA"        : {
                                                    "list"  : [
                                                      {
                                                          "val0"    : {
                                                              "hidden"  : "0",
                                                              "rate"    : "10"
                                                            }
                                                      },
                                                      {
                                                          "val1"    : {
                                                              "hidden"  : "0",
                                                              "rate"    : "20"
                                                           }
                                                    }
                                                    ],
                                                "cpe_status"  : "Provisioned"
                                          }
                                 }';
    
            $objJson        = json_decode($strJson);
            $data           = $objJson->DATA;
            $lists          = $data->list;
            $list0          = $lists[0];
            $list1          = $lists[1];
    
            var_dump($lists);
    

    上面的var_dump($lists) 产生::

            array (size=2)
              0 => 
                object(stdClass)[47]
                  public 'val0' => 
                    object(stdClass)[46]
                      public 'hidden' => string '0' (length=1)
                      public 'rate' => string '10' (length=2)
              1 => 
                object(stdClass)[49]
                  public 'val1' => 
                    object(stdClass)[48]
                      public 'hidden' => string '0' (length=1)
                      public 'rate' => string '20' (length=2)
    

    现在,您可以使用简单的循环从 List 中获取所需的所有数据,如下所示:

    <?php
    
            foreach($lists as $objList){
                if(is_object($objList)){
                    foreach($objList as $key=>$data){
                        // NOW, YOU CAN DO SOMETHING WITH THE DATA...
                        // LIKE GET THE `hidden` OR `rate` PROPERTIES/ATTRIBUTES
                        $hidden     = $data->hidden;
                        $rate       = $data->rate;
                        // var_dump($hidden);
                        // var_dump($rate);
                        // var_dump($key);
                        var_dump($data);
                    }
                }
            }
    

    【讨论】:

    • 这很酷,但与所有其他类似主题的回复一样,它仅适用于已知的 JSON 结构。如果想在每一行打印 JSON 对象元素的完整“地址”,该怎么办?
    【解决方案3】:

    试试

    $data = '{
                      "STATUS": "SUCCESS",
                      "MESSAGE": "",
                      "DATA": {
                        "list": [
                          {
                            "val0": {
                              "hidden": "0",
                              "rate": "10"
                            }
                          },
                          {
                            "val1": {
                              "hidden": "0",
                              "rate": "20"
                            }
                          }
                        ],
                        "status": "Provisioned"
                      }
                    }';
            $data = json_decode($data); 
    
            $ss = $data->DATA->list;
            echo $ss[0]->val0->rate; 
    

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多