Skip to content
Advertisement

Reformat json in a correct way

I have this php code as I am trying to execute a particular function in my php project, I code the implementation correct but I ran into a small problem.

                <?php echo '<script type="text/javascript">';

                $data = array(
                    'base' => 'USD',
                    'alter' => 'ETH',
                    'data' => array()
                );

                foreach ($cryptos as $row) {
                    $sy = $row["symbol"];
                    $data['data'][] = array(
                       "$sy"  => [
                            "rate" => 1.552000000000000,
                            "min" => 1.0077600000000000,
                            "max" => 10.077600000000000,
                            "code" => $row["symbol"],
                            "dp" => 8

                        ],

                    );
                }
                print_r("var fxCur = " . json_encode($data));

Running the code above I got this result below, That’s the expected result but I want to omit [] between data

{
   "base":"USD",
   "alter":"ETH",
   "data":[
      {
         "BTC":{
            "rate": 1.552000000000000,
            "min": 1.0077600000000000,
            "max": 10.077600000000000,
            "code":"BTC",
            "dp":8
         }
      },
      {
         "ETH":{
            "rate": 1.552000000000000,
            "min": 1.0077600000000000,
            "max": 10.077600000000000,
            "code":"ETH",
            "dp":8
         }
      }
   ]
}

But actually I wanted this result

{
   "base":"USD",
   "alter":"ETH",
   "data":{
      "BTC":{
          "rate": 1.552000000000000,
          "min": 1.0077600000000000,
          "max": 10.077600000000000,
         "code":"BTC",
         "dp":8
      },
      "ETH":{
          "rate": 1.552000000000000,
          "min": 1.0077600000000000,
          "max": 10.077600000000000,
         "code":"ETH",
         "dp":8
      },
   
   }
}

Advertisement

Answer

You’re telling it to construct the data structure that way.

$data['data'][] = array(
  "$sy"  => [
    ...
  ]
);

That line says “append an element to $data['data'] at the next integer index and set it equal to the array e.g. [ "BTC" => [ ... ]]

I think what you want is:

$data['data'][$sy] = [
    "rate" => 1.552000000000000,
    "min" => 1.0077600000000000,
    "max" => 10.077600000000000,
    "code" => $row["symbol"],
    "dp" => 8
];
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement