Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing nested JSON to retrieve nested array values

Tags:

json

php

I am trying to get some specific fields out of this Json. I have already managed to retrieve the ones in the first level but I need to get some out of the data field. I would like to get an array of the following data fields:

data = [(data artist id, data artist id name, and data rank), (data artist id, data artist id name, and data rank)...] 

For example:

data = [(ed61fe981f9143fe82536a0e5e9836f7, Rihanna, 1), (668dfb9383684b79ba603605db21ac51, PSY, 2)..]

Any idea how to do this?

The Json is below :

{
" response": {
"class": "chart",
"data": [
    {
        "artist": {
            "class": "artist",
            "id": "ed61fe981f9143fe82536a0e5e9836f7",
            "musicbrainz": "73e5e69d-3554-40d8-8516-00cb38737a1c",
            "name": "Rihanna"
        },
        "rank": 1,
        "value": 42437.6397
    },
    {
        "artist": {
            "class": "artist",
            "id": "668dfb9383684b79ba603605db21ac51",
            "musicbrainz": "f99b7d67-4e63-4678-aa66-4c6ac0f7d24a",
            "name": "PSY"
        },
        "rank": 2,
        "value": 21562.2685
    },

   … goes up to about 200 items
   ],

     "end_time": 1358553600,
    "id": "396c5b836ce74200b2b5b8ba1df28956",
     "name": "high_flyers_plays_total",
     "next_id": null,
     "now_id": "b857276b34cf488f9a934765c3281af7",
     "period": 86400,
     "previous_id": "cb566393058c4ddfa0b957063fbdc2e3",
     "start_time": 1358467200
     },
   "success": true
  }

Here is my php code :

<?php


  //Chart json url
  $url = "http://website.com";

   function get_json($url)
   {
      $ch = curl_init();

      //Very short time to get json so long timeout not needed
       $timeout = 5;
       curl_setopt($ch,CURLOPT_URL,$url);
       curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
       curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
       $data = curl_exec($ch);
       curl_close($ch);
       return $data;
   }


   $json = get_json($url);

   $info = json_decode($json,true);




//Prints the outer variables

   print "This is the end_time for the chart : ";
   print $info["response"]["end_time"]."<br />";

   print "This is the name for the chart : ";
   print $info["response"]["name"]."<br />";

   print "This is the UUID of the chart : ";
   print $info["response"]["id"]."<br />";


   print "This is the period for the chart : ";
   print $info["response"]["period"]."<br />";

   /* gets the json data from the URL */




?>
like image 351
AndroidEnthusiast Avatar asked Jan 20 '13 14:01

AndroidEnthusiast


People also ask

How can I access and process nested objects arrays or JSON?

A nested data structure is an array or object which refers to other arrays or objects, i.e. its values are arrays or objects. Such structures can be accessed by consecutively applying dot or bracket notation. Here is an example: const data = { code: 42, items: [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }] };

How do I read a nested JSON file?

Use pd. read_json() to load simple JSONs and pd. json_normalize() to load nested JSONs. You can easily access values in your JSON file by chaining together the key names and/or indices.

How do you parse an array of JSON objects?

Example - Parsing JSON Use the JavaScript function JSON.parse() to convert text into a JavaScript object: const obj = JSON.parse('{"name":"John", "age":30, "city":"New York"}'); Make sure the text is in JSON format, or else you will get a syntax error.

Does JSON parse return an array?

Array Data JSON. parse() converts array data into a Javascript array. The array data must be a valid JSON string. This is an uncommon use for JSON.


1 Answers

How about this?

$stuff = json_decode($json, true);

$results = array();

foreach($stuff['response']['data'] as $chunk) {
  $artist = $chunk['artist'];
  $id   = $artist['id'];
  $name = $artist['name'];

  $rank = $chunk['rank'];

  $tuple = array($id, $name, $rank);

  $results[] = $tuple;
}
like image 112
digitalronin Avatar answered Nov 09 '22 11:11

digitalronin