0

i have json array that i generate from php. However the format is not what i want. i have related questions but it is not the format i want Please see below what i did and tried vs what i want

    //////////////
$data variable array
///////////////

Array
    (
        [0] => Array
            (
                [id] => 2
                [start_date] => 2018-05-17 08:40
                [end_date] => 2018-05-17 09:00
            )

        [1] => Array
            (
                [id] => 3
                [start_date] => 2018-05-17 08:40
                [end_date] => 2018-05-17 09:00
            )
      )

This is what i do

$array[] = $data;
echo json_encode($array);

The output

[
 {"id":2,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"},
 {"id":3,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"}
]

This is what i tried

$array["data"] = $data;
echo json_encode($array);

The output

{"data":
 {"id":2,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"},
 {"id":3,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"}
}

The output i want

{
  "data": [
             {"id":2,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"},
             {"id":3,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"}
          ]
}
user7498826
  • 173
  • 3
  • 9

4 Answers4

1

instead of using $array["data"] i put "data" into an array an then another array for $data.

$array = array("data" => $data);
$enData = json_encode($array); //encoding array to json
$deData = json_decode($enData, true); //decoding array

print_r($deData);

The above would output something like this:

Array
(
    [data] => Array
        (
            [id] => 3
            [start_date] => 2018-05-17 08:40
            [end_date] => 2018-05-17 09:00
        )

)

and if you do this:

print_r($deData['data']);

//Output

Array
(
    [id] => 3
    [start_date] => 2018-05-17 08:40
    [end_date] => 2018-05-17 09:00
)
JamesBond
  • 312
  • 2
  • 17
0

You need to make $data an array first.

For example:

$data[] = ["id" => 2, "start_date" => "2018-05-17 08:40", "end_date" => "2018-05-17 09:00"];

$array["data"] = $data;
echo json_encode($array);

Which returns:

{
  "data":[
           {"id":2,"start_date":"2018-05-17 08:40","end_date":"2018-05-17 09:00"}
         ]
}
Chris
  • 1,574
  • 4
  • 16
  • 49
0

you have to build an array first, then construct an object. See below

$array = [
    [
        "id" => 2,
        "start_date" => "2018-05-17 08:40",
        "end_date" => "2018-05-17 09:00"
    ],
    [
        "id" => 3,
        "start_date" => "2018-05-17 08:40",
        "end_date" => "2018-05-17 09:00"
    ]
];
$data["data"] = $array;
echo json_encode($data);
NicossB
  • 408
  • 2
  • 13
  • i have an array, please edited code. i did exactly that but the output is as indicated on the third ouptut – user7498826 Aug 16 '18 at 10:41
  • This is strange. It looks like your first data variable array is not interpreted as a try array. Can you please var_dump it ? Point is : check this answer, looks similar https://stackoverflow.com/questions/11195692/json-encode-sparse-php-array-as-json-array-not-json-object – NicossB Aug 16 '18 at 10:54
0

It seems that you are getting the $data from loop over sql output:

$array = ["data"=>[]];// initialize $array outside your loop

while($data = mysqli_fetch_assoc($result)){
    $array['data'][] = $data;  // push $data into $array['data']
}

echo json_encode($array);
Ketan Yekale
  • 2,108
  • 3
  • 26
  • 33