Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Правильный тип значения в JSON / 7 сообщений из 7, страница 1 из 1
18.08.2015, 12:23
    #39031491
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
Всем добрый день!

Пишу 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
18.08.2015, 12:36
    #39031503
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
Dozent,

php сам преобразует типы, но можно принудительно указать (float)$foo и $foo преобразуется в число
...
Рейтинг: 0 / 0
18.08.2015, 12:38
    #39031505
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
для проверки можно использовать is-numeric
...
Рейтинг: 0 / 0
18.08.2015, 12:48
    #39031522
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
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
18.08.2015, 13:22
    #39031544
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
а где потом это число используется? сделай (float)"36.3" если уж прям так принципиально
...
Рейтинг: 0 / 0
18.08.2015, 13:46
    #39031575
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
еще раз. в PHP нечеткая типизация, и автоматическое преобразование типов.
...
Рейтинг: 0 / 0
18.08.2015, 14:07
    #39031608
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный тип значения в JSON
Поменял поле в базе на FLOAT всё нормально как и нужно... Спасибо проблема решена
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Правильный тип значения в JSON / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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