phparraysjsonencodejsonencoder

Root name and child name for json format using json_encode in php


I'm having some issues with json_encode, i need that the output were something like this:

{
  "Advisories": [
    {
      "Advisory": {
        "Severe": "false",
        "description": "Lorem ipsum dolor sit amet",
        "title": "Advise:",
      }
    },
    {
      "Advisory": {
        "Severe": "true",
        "description": "Lorem ipsum dolor sit amet",
        "title": "Advise:",
      }
    },
    {
      "Advisory": {
        "Severe": "true",
        "description": "Lorem ipsum dolor sit amet",
        "title": "Advise:",
      }
    }
  ]
}

this is how my var $arrayItems is:

Array (
    [0] => Array (
        [Severe] => false
        [description] => Lorem ipsum dolor sit amet.
    [title] => Advise
    )
    [1] => Array (
        [Severe] => false
        [description] => Lorem ipsum dolor sit amet.
    [title] => Advise
    )
    [2] => Array (
        [Severe] => true
        [description] => Lorem ipsum dolor sit amet
    [title] => Advise
    )
)

but when i use the function json_encode like this: print json_encode(['Advisories' => array('Advisory'=>$arrayItems)]); the output is like this:

{
  "Advisories": {
    "Advisory": [
      {
        "Severe": "false",
        "description": "Lorem ipsum dolor sit amet",
        "title": "Advise",
      },
      {
        "Severe": "false",
        "description": "Lorem ipsum dolor sit amet",
        "title": "Advise",
      },
      {
        "Severe": "true",
        "description": "Lorem ipsum dolor sit amet",
        "title": "Advises ",
      }
    ]
  }
}

I dont know what else can i do to change the output,

Could you please help me? Regards


Solution

  • To achieve that format you will have to modify the $arrayItems a little bit.

    The below snippet will modify each subarray to include the 'Advisory' key which will be a property pointing to a json object (which holds the original subarray data).

    $result = ['Advisories' => array_map(
        function ($subarray) {
            return ['Advisory' => $subarray];
        },
        $arrayItems
    )];
    
    return json_encode($result);
    

    Result:

    {
        "Advisories": [
            {
                "Advisory": {
                    "Severe": false,
                    "description": "Lorem ipsum dolor sit amet.",
                    "title": "Advise"
                }
            },
            {
                "Advisory": {
                    "Severe": false,
                    "description": "Lorem ipsum dolor sit amet.",
                    "title": "Advise"
                }
            },
            {
                "Advisory": {
                    "Severe": true,
                    "description": "Lorem ipsum dolor sit amet",
                    "title": "Advise"
                }
            }
        ]
    }