diff --git a/include/maxscale/resultset.hh b/include/maxscale/resultset.hh index 5b83f73e1..1da12209d 100644 --- a/include/maxscale/resultset.hh +++ b/include/maxscale/resultset.hh @@ -64,4 +64,5 @@ private: std::vector> m_rows; ResultSet(std::initializer_list names); + json_t* get_json_value(const std::string& s); }; diff --git a/server/core/resultset.cc b/server/core/resultset.cc index 4276fc9f5..b3593ee50 100644 --- a/server/core/resultset.cc +++ b/server/core/resultset.cc @@ -208,6 +208,24 @@ void ResultSet::write(DCB* dcb) mysql_send_eof(dcb, seqno); } +json_t* ResultSet::get_json_value(const std::string& s) +{ + json_t* js; + char* end; + long l = strtol(s.c_str(), &end, 10); + + if (end != s.c_str() && *end == '\0') + { + js = json_integer(l); + } + else + { + js = json_string(s.c_str()); + } + + return js; +} + void ResultSet::write_as_json(DCB* dcb) { json_t* arr = json_array(); @@ -218,7 +236,7 @@ void ResultSet::write_as_json(DCB* dcb) for (size_t i = 0; i < row.size(); i++) { - json_object_set_new(obj, m_columns[i].c_str(), json_string(row[i].c_str())); + json_object_set_new(obj, m_columns[i].c_str(), get_json_value(row[i])); } json_array_append_new(arr, obj);