diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-03-10 15:18:28 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:52:53 +0300 |
commit | 9e24ab84e209693da87049c5e5bb233520340ebe (patch) | |
tree | e8bf391ae397a4c3971604470a5523b437d61dcf /3party | |
parent | 302e106d36cb80b28d01caf8b7856771d75578cd (diff) |
Moving FromJSONObject functions to 3party/jansson/myjansson unit.
Diffstat (limited to '3party')
-rw-r--r-- | 3party/jansson/jansson.pro | 1 | ||||
-rw-r--r-- | 3party/jansson/myjansson.cpp | 40 | ||||
-rw-r--r-- | 3party/jansson/myjansson.hpp | 22 |
3 files changed, 63 insertions, 0 deletions
diff --git a/3party/jansson/jansson.pro b/3party/jansson/jansson.pro index 09b8a6dfcd..c7f5608f6c 100644 --- a/3party/jansson/jansson.pro +++ b/3party/jansson/jansson.pro @@ -19,6 +19,7 @@ SOURCES += \ src/error.c \ src/strconv.c \ jansson_handle.cpp \ + myjansson.cpp \ HEADERS += \ myjansson.hpp \ diff --git a/3party/jansson/myjansson.cpp b/3party/jansson/myjansson.cpp new file mode 100644 index 0000000000..c91c9ea420 --- /dev/null +++ b/3party/jansson/myjansson.cpp @@ -0,0 +1,40 @@ +#include "3party/jansson/myjansson.hpp" + +namespace my +{ +void FromJSON(json_t * root, string & result) +{ + result = string(json_string_value(root)); +} + +void FromJSONObject(json_t * root, string const & field, string & result) +{ + if (!json_is_object(root)) + MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); + json_t * val = json_object_get(root, field.c_str()); + if (!val) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + if (!json_is_string(val)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json string.")); + result = string(json_string_value(val)); +} + +void FromJSONObject(json_t * root, string const & field, strings::UniString & result) +{ + string s; + FromJSONObject(root, field, s); + result = strings::MakeUniString(s); +} + +void FromJSONObject(json_t * root, string const & field, double & result) +{ + if (!json_is_object(root)) + MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); + json_t * val = json_object_get(root, field.c_str()); + if (!val) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + if (!json_is_number(val)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); + result = json_number_value(val); +} +} // namespace my diff --git a/3party/jansson/myjansson.hpp b/3party/jansson/myjansson.hpp index cb8fc07770..3c918b8ecf 100644 --- a/3party/jansson/myjansson.hpp +++ b/3party/jansson/myjansson.hpp @@ -3,9 +3,12 @@ #include "jansson_handle.hpp" #include "base/exception.hpp" +#include "base/string_utils.hpp" #include <jansson.h> +#include "std/vector.hpp" + namespace my { class Json @@ -25,4 +28,23 @@ public: json_t * get() const { return m_handle.get(); } }; + +void FromJSON(json_t * root, string & result); +void FromJSONObject(json_t * root, string const & field, string & result); +void FromJSONObject(json_t * root, string const & field, strings::UniString & result); +void FromJSONObject(json_t * root, string const & field, double & result); + +template <typename T> +void FromJSONObject(json_t * root, string const & field, vector<T> & result) +{ + json_t * arr = json_object_get(root, field.c_str()); + if (!arr) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + if (!json_is_array(arr)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json array.")); + size_t sz = json_array_size(arr); + result.resize(sz); + for (size_t i = 0; i < sz; ++i) + FromJSON(json_array_get(arr, i), result[i]); +} } // namespace my |