Как получить данные в формате JSON - PullRequest
0 голосов
/ 08 сентября 2018

В настоящее время я создаю API и хочу получить данные в формате JSON. Но я не могу получить это. Это приходит в нормальной форме. Но как конвертировать его в JSON. Если я пишу json_encode($response) вне цикла, тогда я получаю данные в формате json, но только одни данные.

Если я пишу код json внутри цикла, тогда я получаю все данные, но не в форме JSON. Как это решить. Я не могу найти идеальное решение для этого вопроса.

$tsym = strtolower($_REQUEST['tsym']);
$time = strtolower($_REQUEST['time']);
$mil = $time;
$seconds = $mil / 1000;
$normal_date = date("Y-m-d H:i:s", $seconds);

$sql = "SELECT * FROM `forex` where pair='".$tsym."' and date >=  '".$normal_date."' order by date limit 0,10";

$result = mysqli_query($conn, $sql);
$response = array();


while($rows = mysqli_fetch_assoc($result)){
  $from_sym = $rows['pair'];

 //if(!isset($response[$from_sym]))
      {
           $response[$from_sym] = $rows;
          //echo json_encode($response, true);
     //}
      print_r( json_encode($response)); //this prints all the data but not 
        in json form

       }
      print_r( json_encode($response)); //this prints single data but in 
      json form

Я хочу получить все данные, но в формате JSON. как получить его? Спасибо вам за помощь. Я хочу такие данные:

{
    "CHFJPY": {
        "id": "33",
        "pair": "CHFJPY",
        "date": "2018-04-22 20:42:21",
        "price": "110.413",
        "change_rate": "0",
        "fetched": "1"
    }
},
{
    "CHFJPY": {
        "id": "75",
        "pair": "CHFJPY",
        "date": "2018-04-22 20:42:29",
        "price": "110.413",
        "change_rate": "0",
        "fetched": "1"
    }
},
{
    "CHFJPY": {
        "id": "117",
        "pair": "CHFJPY",
        "date": "2018-04-23 11:25:47",
        "price": "110.585",
        "change_rate": "0",
        "fetched": "1"
    }
},
{
    "CHFJPY": {
        "id": "159",
        "pair": "CHFJPY",
        "date": "2018-04-23 12:34:54",
        "price": "110.816",
        "change_rate": "0",
        "fetched": "1"
    }
},
{
    "CHFJPY": {
        "id": "201",
        "pair": "CHFJPY",
        "date": "2018-04-23 12:35:04",
        "price": "110.825",
        "change_rate": "0",
        "fetched": "1"
    }
}

Но я получаю только одну информацию.

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

Вам необходимо переместить json_encode внутрь while цикла

<?php
$tsym_escaped = mysqli_real_escape_string($conn, $_REQUEST['tsym']);
$date = date("Y-m-d H:i:s", $_REQUEST['time']/1000);
$sql = sprintf(
        "SELECT * FROM `forex` WHERE `pain`='%s' AND `date`>='%s' ORDER BY `date` LIMIT 0,10",
        $tsym_escaped,
        $date
    );
$result = mysqli_query($conn, $sql);
$response = array();

while($row = mysqli_fetch_assoc($result)){
    $response[$row['pair']] = $row;
}
echo json_encode($response);

Кроме того, способ передачи данных в запрос SQL небезопасен и может привести к внедрению SQL.

0 голосов
/ 08 сентября 2018

Вы должны добавить свою строку к окончательному массиву $response в цикле while

$response = array();
while($rows = mysqli_fetch_assoc($result)){
    $from_sym = $rows['pair'];
    $res[$from_sym] = $rows;
    $response[] = $res;
}
print_r(json_encode($response));
0 голосов
/ 08 сентября 2018

не понятно, почему у вас нет json, так что .. более понятным способом попробуйте

  while($rows = mysqli_fetch_assoc($result)){
      $response[$rows['pair']] = $rows;
  }
  $myJSON  =    json_encode($response);
  var_dump($myJSON);

это должно создать массив $ reponse с соответствующим vleus для каждого индекса 'pair'

но может быть вам нужен результат для всех строк, поэтому попробуйте

  while($rows = mysqli_fetch_assoc($result)){
      $response[] = $rows;
  }
  $mySecondJSON  =    json_encode($response);
  var_dump($mySecondJSON); 

или

  while($rows = mysqli_fetch_assoc($result)){
      $response[] = $rows['pair'];
  }
  $myOtherJSON  =    json_encode($response);
  var_dump($myOtherJSON); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...