Helper functions to extract numbers from JSON data Prepare for the removal of Obj_To_I64, Obj_To_F64, and Obj_To_Bool.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/8b4f0606 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/8b4f0606 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/8b4f0606 Branch: refs/heads/master Commit: 8b4f06069348c6f2aff545fcc63b2bc551c7cdec Parents: 46dd03c Author: Nick Wellnhofer <[email protected]> Authored: Sat May 23 15:11:30 2015 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Sat May 23 17:09:12 2015 +0200 ---------------------------------------------------------------------- core/Lucy/Util/Json.c | 63 ++++++++++++++++++++++++++++++++++++++++++++ core/Lucy/Util/Json.cfh | 18 +++++++++++++ 2 files changed, 81 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/8b4f0606/core/Lucy/Util/Json.c ---------------------------------------------------------------------- diff --git a/core/Lucy/Util/Json.c b/core/Lucy/Util/Json.c index f9b9930..4b589ea 100644 --- a/core/Lucy/Util/Json.c +++ b/core/Lucy/Util/Json.c @@ -701,3 +701,66 @@ S_set_error(CharBuf *buf, const char *json, const char *limit, int line, Err_set_error(Err_new(mess)); } +int64_t +Json_obj_to_i64(Obj *obj) { + int64_t retval = 0; + + if (!obj) { + THROW(ERR, "Can't extract integer from NULL"); + } + else if (Obj_Is_A(obj, STRING)) { + retval = Str_To_I64((String*)obj); + } + else if (Obj_Is_A(obj, NUM)) { + retval = Num_To_I64((Num*)obj); + } + else { + THROW(ERR, "Can't extract integer from object of type %o", + Obj_Get_Class_Name(obj)); + } + + return retval; +} + +double +Json_obj_to_f64(Obj *obj) { + double retval = 0; + + if (!obj) { + THROW(ERR, "Can't extract float from NULL"); + } + else if (Obj_Is_A(obj, STRING)) { + retval = Str_To_F64((String*)obj); + } + else if (Obj_Is_A(obj, NUM)) { + retval = Num_To_F64((Num*)obj); + } + else { + THROW(ERR, "Can't extract float from object of type %o", + Obj_Get_Class_Name(obj)); + } + + return retval; +} + +bool +Json_obj_to_bool(Obj *obj) { + bool retval = false; + + if (!obj) { + THROW(ERR, "Can't extract bool from NULL"); + } + else if (Obj_Is_A(obj, STRING)) { + retval = (Str_To_I64((String*)obj) != 0); + } + else if (Obj_Is_A(obj, NUM)) { + retval = Num_To_Bool((Num*)obj); + } + else { + THROW(ERR, "Can't extract bool from object of type %o", + Obj_Get_Class_Name(obj)); + } + + return retval; +} + http://git-wip-us.apache.org/repos/asf/lucy/blob/8b4f0606/core/Lucy/Util/Json.cfh ---------------------------------------------------------------------- diff --git a/core/Lucy/Util/Json.cfh b/core/Lucy/Util/Json.cfh index ff8d32e..6a0e6a6 100644 --- a/core/Lucy/Util/Json.cfh +++ b/core/Lucy/Util/Json.cfh @@ -57,6 +57,24 @@ class Lucy::Util::Json inherits Clownfish::Obj { */ inert void set_tolerant(bool tolerant); + + /** Extract an integer value from an object that is part of a JSON + * structure. Throws an error if the object isn't a String or Num. + */ + inert int64_t + obj_to_i64(Obj *obj); + + /** Extract a float value from an object that is part of a JSON + * structure. Throws an error if the object isn't a String or Num. + */ + inert double + obj_to_f64(Obj *obj); + + /** Extract a bool value from an object that is part of a JSON + * structure. Throws an error if the object isn't a String or Num. + */ + inert bool + obj_to_bool(Obj *obj); }
