Формат сообщения JSON, полученного из таблицы db с помощью PHP, искажается

У меня есть таблица базы данных MySQL, СТУДЕНТ в следующем формате:

ID    NAME     PLACE    MARKS
1     John      NYC     62/115
2     Rose      SF      43/45
3     Alex      DC      54/75
.      .        .       .
.      .        .       .
.      .        .       .
.      .        .       .
.      .        .       .
.      .        .       .
.      .        .       .
.      .        .       .
50    Adam      NYC     88/96

Я пытаюсь создать сообщение JSON, извлекая данные из этой таблицы с помощью php. Требуемое сообщение JSON должно быть:

[{"NAME":"John","ID":"1","PLACE":"NYC","MARKS":"62/115","PERCENTAGE":"53.91%"},{"NAME":"Rose","ID":"2","PLACE":"SF","MARKS":"43/45","PERCENTAGE":"95.56%"},{"NAME":"Alex","ID":"3","PLACE":"DC","MARKS":"54/75","PERCENTAGE":"72%"},.........,{"NAME":"Adam","ID":"50","PLACE":"NYC","MARKS":"88/96","PERCENTAGE":"91.67%"}]

Я написал следующий код:

<!DOCTYPE html>
<meta charset = "UTF-8">
<head>
<style>
</style>
</head>

<?php
                   $servername = "test.server.com";
                   $username = "test_user";
                   $password = "test_pass";
                   $dbname = "test_db";
                   $conn = new mysqli($servername, $username, $password, $dbname);

                   if ($conn->connect_error) {
                          die("Connection failed: " . $conn->connect_error);
                         }

                       $sql = "select NAME, ID, PLACE, MARKS from STUDENT;";

                       $temp = array();

                       $result = $conn->query($sql);

                       while($row=$result->fetch_assoc())
                          {
                             $temp[] = $row;
                             $number = $row["MARKS"];

                            $pieces = explode("/", $number);

                            if ($pieces[1] <> 0) {
                                      $per = round((($pieces[0]/$pieces[1])*100),2);
                                    }
                            else { $per = 'Undefined';}

                           $temp1= json_encode($temp).($temp[]['percentage']=$per);
                         }

                     $testjson= json_encode($temp1);
                     echo $testjson;

                     mysqli_close($conn);
?>

С помощью приведенного выше кода я получаю следующий результат:

"[{\"NAME\":\"John\",\"ID\":\"1\",\"PLACE\":\"NYC\",\"MARKS\":\"62\\/115\"},{\"percentage\":53.91},{\"NAME\":\"Rose\",\"ID\":\"2\",\"PLACE\":\"SF\",\"MARKS\":\"43\\/45\"},{\"percentage\":95.56},{\"NAME\":\"Alex\",\"ID\":\"3\",\"PLACE\":\"DC\",\"MARKS\":\"54\\/75\"},{\"percentage\":72},..........,{\"NAME\":\"Adam\",\"ID\":\"50\",\"PLACE\":\"NYC\",\"MARKS\":\"88\\/96\"}]91.67"

Вышеуказанный формат искажен.

Как я могу вычислить процент от оценок на лету и включить его в сообщение JSON в моем требуемом формате? Пожалуйста помоги!

Вы дважды звоните json_encode(), не делайте этого. Создайте объект, который вы хотите закодировать внутри цикла, а затем закодируйте его.

Sammitch 15.05.2018 02:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
<!DOCTYPE html>
<meta charset = "UTF-8">
<head>
<style>
</style>
</head>

<?php
    $servername = "test.server.com";
    $username = "test_user";
    $password = "test_pass";
    $dbname = "test_db";
    $conn = new mysqli($servername, $username, $password,$dbname);
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }

    $sql = "select NAME, ID, PLACE, MARKS from STUDENT;";

    $temp = array();

    $result = $conn->query($sql);

    while($row=$result->fetch_assoc())
    {

       $number = $row["MARKS"];
       $pieces = explode("/", $number);
       if ($pieces[1] <> 0) {
         $per = round((($pieces[0]/$pieces[1])*100),2);
       }else { $per = 'Undefined';}
       $row['percentage'] = $per; // add percentage to row
       $temp[] =$row; // add row with percentage to temp array
    }
    $testjson= json_encode($temp1); // note that we only run json_encode once
    echo $testjson;
    mysqli_close($conn);
?>

попробуйте код выше.

Другие вопросы по теме