powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Правильный тип значения в JSON
7 сообщений из 7, страница 1 из 1
Правильный тип значения в JSON
    #39031491
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день!

Пишу API для работы с БД (FireBird 2.5)

Полученный результат отдаю в формате JSON, проблема в том, что из базы тянется всё как строка и соответсвено все значения в JSON строковые, но в базе есть вещественые числа и они должны в ответе быть как вещественые числа.

Вообще числа должны быть числами, строки строками. Прошу не судить сильно с PHP знаком не очень хорошо....

Так делаю запрос в базу отдаю ответ:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
        $query = "SELECT RSCENARIOID , ENDTIME , DEATH_ENDTIME , FINISH_TIME , VENDSCENARIO , VNEXTSCENARIO , VPULSE_BEGINVALUE , RPULSE_TYPE , VPULSE_ENDVALUE , RPULSE_FORM , VPULSE_PRIORITY , VAD_BEGINVALUE , RAD_TYPE , VAD_ENDVALUE , VAD_PRIORITY , DIA_BEGINVALUE , DIA_TYPE , DIA_ENDVALUE , VETCO2_BEGINVALUE , RETCO2_TYPE , VETCO2_ENDVALUE , VETCO2_PRIORITY , VSPO2_BEGINVALUE , RSPO2_TYPE , VSPO2_ENDVALUE , VSPO2_PRIORITY , VDH_BEGINVALUE , RDH_TYPE , VDH_ENDVALUE , RDH_FORM , VDH_PRIORITY , VZR_BEGINVALUE , RZR_TYPE , VZR_ENDVALUE , VZR_PRIORITY , VZR_REACT_TO_LIGHT , VBODY_TEMP , VCOUGH , VCONSCIOUS , VSPASM_GLOTTIS , VLUNGS , VDELAYED_REACT FROM scenario_params";
        $str_filter = array();
        foreach ($_GET as $param_name => $param_value) {
            switch ($param_name) {
                case 'id_scenario':{
                    $id_scenario = intval($_GET['id_scenario']);
                    $str_filter[] = "(rscenarioid=$id_scenario)";
                }
                break;
                /*case 'name':{
                $name = "'".addslashes(str_replace("'", "''", $_GET['name']))."'"; ;
                $str_filter[] = "(VNAME=$name)";
                }
                break;*/
                default:
                    continue 2;//выходим из свича и другая итерация цикла
            }
        }
        if (!empty($str_filter)) {
            $query .= ' WHERE (deleted=0) AND '.implode(' AND ', $str_filter);
        }
        else{
            $query .= ' WHERE (deleted=0)';
        }
        echo json_encode(db_query_to_info_array($query));



т.е. отдаю результат запроса вот так : echo json_encode(db_query_to_info_array($query));

функция db_query_to_info_array отписана в другом юнете:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
//получаем запрос и возвращаем его массивом
function db_query_to_info_array($query, $link = false)
{
    if (!empty($link))
    {//если выполняем для переданого подключения
        $result = ibase_query($link, $query);
    }
    else
    {//для последнего
        // db_connect(); Потому что при проверке апикей уже создаётсяконект
        $result = ibase_query($query);
    }
    $res_array = array();
    if ($first_row = ibase_fetch_assoc($result))
    {
        $row = array();
        $field_names = array();
        foreach ($first_row as $field_name => $field_value)
        {
            $field_names[] = $field_name;
            $row[] = $field_value;
        }
        $res_array['field_names'] = $field_names;
        do
        {
            $res_array['data'][] = $row;
        } while ($row = ibase_fetch_row($result));
    }
    ibase_free_result ($result);
    //ibase_close();
    return $res_array;
}



И я так предпологаю где-то в этой функции нужно воткнуть проверку на строка не строка, точнее число не число...

Подскажите как это правильно сделать....
...
Рейтинг: 0 / 0
Правильный тип значения в JSON
    #39031503
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dozent,

php сам преобразует типы, но можно принудительно указать (float)$foo и $foo преобразуется в число
...
Рейтинг: 0 / 0
Правильный тип значения в JSON
    #39031505
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для проверки можно использовать is-numeric
...
Рейтинг: 0 / 0
Правильный тип значения в JSON
    #39031522
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu,

Да, действительно интовые занчения сами преобразуются, а вот те, которые должны быть веществеными нет)

вот что возвращает

Код: php
1.
{"field_names":["RSCENARIOID","ENDTIME","DEATH_ENDTIME","FINISH_TIME","VENDSCENARIO","VNEXTSCENARIO","VPULSE_BEGINVALUE","RPULSE_TYPE","VPULSE_ENDVALUE","RPULSE_FORM","VPULSE_PRIORITY","VAD_BEGINVALUE","RAD_TYPE","VAD_ENDVALUE","VAD_PRIORITY","DIA_BEGINVALUE","DIA_TYPE","DIA_ENDVALUE","VETCO2_BEGINVALUE","RETCO2_TYPE","VETCO2_ENDVALUE","VETCO2_PRIORITY","VSPO2_BEGINVALUE","RSPO2_TYPE","VSPO2_ENDVALUE","VSPO2_PRIORITY","VDH_BEGINVALUE","RDH_TYPE","VDH_ENDVALUE","RDH_FORM","VDH_PRIORITY","VZR_BEGINVALUE","RZR_TYPE","VZR_ENDVALUE","VZR_PRIORITY","VZR_REACT_TO_LIGHT","VBODY_TEMP","VCOUGH","VCONSCIOUS","VSPASM_GLOTTIS","VLUNGS","VDELAYED_REACT"],"data":[[1,15,-1,null,null,40,65,1,60,1,0,120,1,120,0,80,1,80,35,1,35,0,99,1,99,0,22,1,18,1,0,5,1,5,0,3,"36.3",0,null,null,null,null]]}



3,"36.3",0,null,null,null,null]

Вот тут 36.3 как строка, хотя это вещественое число, в базе это поле типа NUMERIC. Мб в этом проблема?
...
Рейтинг: 0 / 0
Правильный тип значения в JSON
    #39031544
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где потом это число используется? сделай (float)"36.3" если уж прям так принципиально
...
Рейтинг: 0 / 0
Правильный тип значения в JSON
    #39031575
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз. в PHP нечеткая типизация, и автоматическое преобразование типов.
...
Рейтинг: 0 / 0
Правильный тип значения в JSON
    #39031608
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменял поле в базе на FLOAT всё нормально как и нужно... Спасибо проблема решена
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Правильный тип значения в JSON
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]