user17189691
user17189691

Reputation:

unable to access arrays of json data -php

$response is the data am getting when accessing an external API. i wanted to access the value of the key fileList. I tried like dd($result['serverResponse']['extensionServiceState']['payload']['fileList']) , but it returns error undefined index extensionServiceState . How can i achieve the required result?

$response = curl_exec($curl);
$result = json_decode($response, true);
//var_dump($result);
dd($result['serverResponse']['extensionServiceState']['payload']['fileList']);

before json decode

"""

{"resourceId":"abcd","sid":"123","serverResponse":{"extensionServiceState":[{"payload":{"fileList":[{"filename":"1.m3u8","sliceStartTime":16439789992},{"filename":"2.mp4","sliceStartTime":16439789992}],"onhold":false,"state":"exit"},"serviceName":"web_recorder_service"},{"payload":{"uploadingStatus":"uploaded"},"serviceName":"upload_service"}]}}

"""

after json decode

 array:3 [
  "resourceId" => "abcd"
  "sid" => "123"
  "serverResponse" => array:1 [
    "extensionServiceState" => array:2 [
      0 => array:2 [
        "payload" => array:1 [
          "uploadingStatus" => "uploaded"
        ]
        "serviceName" => "upload_service"
      ]
      1 => array:2 [
        "payload" => array:3 [
          "fileList" => array:2 [
            0 => array:2 [
              "filename" => "1.m3u8"
              "sliceStartTime" => 1643986576940
            ]
            1 => array:2 [
              "filename" => "2.mp4"
              "sliceStartTime" => 1643986576940
            ]
          ]
          "onhold" => false
          "state" => "exit"
        ]
        "serviceName" => "web_recorder_service"
      ]
    ]
  ]
]

var_dump($$result) after json decode shows the below data

    array(3) {
    ["resourceId"]=>
    string(4)
    "abcd"
    ["sid"]=>
    string(3) "123"
    ["serverResponse"]=>
    array(1) {
    ["extensionServiceState"]=>
    array(2) {
    [0]=>
    array(2) {
    ["payload"]=>
    array(1) {
    ["uploadingStatus"]=>
    string(8) "uploaded"
    }
    ["serviceName"]=>
    string(14) "upload_service"
    }
    [1]=>
    array(2) {
    ["payload"]=>
    array(3) {
    ["fileList"]=>
    array(2) {
    [0]=>
    array(2) {
    ["filename"]=>
    string(45) "1.m3u8"
    ["sliceStartTime"]=>
    int(16439789992)
    }
    [1]=>
    array(2) {
    ["filename"]=>
    string(46) "2.mp4"
    ["sliceStartTime"]=>
    int(16439789992)
    }
    }
    ["onhold"]=>
    bool(false)
    ["state"]=>
    string(4) "exit"
    }
    ["serviceName"]=>
    string(20) "web_recorder_service"
    }
    }
    }
    }

Upvotes: 0

Views: 44

Answers (1)

Simon K
Simon K

Reputation: 1523

Either you pasted the wrong content or json_decode is lying to you. You asked for an associative array from json_decode (by passing the second argument as true). The result of that should actually look like this:


Array
(
    [resourceId] => abcd
    [sid] => 123
    [serverResponse] => Array
        (
            [extensionServiceState] => Array
                (
                    [0] => Array
                        (
                            [payload] => Array
                                (
                                    [fileList] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [filename] => 1.m3u8
                                                    [sliceStartTime] => 16439789992
                                                )

                                            [1] => Array
                                                (
                                                    [filename] => 2.mp4
                                                    [sliceStartTime] => 16439789992
                                                )

                                        )

                                    [onhold] => 
                                    [state] => exit
                                )

                            [serviceName] => web_recorder_service
                        )

                    [1] => Array
                        (
                            [payload] => Array
                                (
                                    [uploadingStatus] => uploaded
                                )

                            [serviceName] => upload_service
                        )

                )

        )

)

So therefore, to get what you want you would need to do this:

dd($result['serverResponse']['extensionServiceState'][0]['payload']['fileList']);

But your data contains multiple items inside extensionServiceState so you may want to loop over those.

Upvotes: 1

Related Questions