2

I have json array like that

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

I want to get the object name of DATA>list>. I tried with get_class($list[0]) but the output is stdClass. Output should be val0.How can I try. Please help

sandy
  • 121
  • 1
  • 3
  • 10

3 Answers3

4

Use json_decode, list is also an array, Therefor first key(0) represent val0, and If you want to get inner content of the val0, then you have to loop it again.

$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/>";   
}
Gayan
  • 2,845
  • 7
  • 33
  • 60
2

Hopefully, the Self-Explanatory Snippet below could offer you a tip on how to go about doing it yourself. And by the way, you may 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);

The var_dump($lists) above yields::

        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)

Now, you can simply get all the data you want from the List using a simple loop like so:

<?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);
                }
            }
        }
Poiz
  • 7,611
  • 2
  • 15
  • 17
  • this is very cool but, as all other replies about similar topics, it works only for knonw JSON structure. What to do if one wants to print on each line the full "address" of an element of a JSON object? – jumpjack Nov 20 '19 at 18:32
1

try

$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; 
Deepak M
  • 849
  • 8
  • 17