summaryrefslogtreecommitdiffstats
path: root/src/json_helper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/json_helper.cpp')
-rw-r--r--src/json_helper.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/json_helper.cpp b/src/json_helper.cpp
index 2e49778..43440db 100644
--- a/src/json_helper.cpp
+++ b/src/json_helper.cpp
@@ -15,6 +15,7 @@
*/
#include "json_helper.hpp"
+#include "hmi-debug.h"
#include <json.h>
@@ -108,3 +109,72 @@ json_object *to_json(std::vector<uint32_t> const &v)
}
return a;
}
+
+namespace jh {
+
+const char* getStringFromJson(json_object* obj, const char* key)
+{
+ json_object* tmp;
+ if (!json_object_object_get_ex(obj, key, &tmp))
+ {
+ HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
+ return nullptr;
+ }
+
+ return json_object_get_string(tmp);
+}
+
+int inputJsonFilie(const char* file, json_object** obj)
+{
+ const int input_size = 128;
+ int ret = -1;
+
+ HMI_DEBUG("wm:jh", "Input file: %s", file);
+
+ // Open json file
+ FILE *fp = fopen(file, "rb");
+ if (nullptr == fp)
+ {
+ HMI_ERROR("wm:jh", "Could not open file");
+ return ret;
+ }
+
+ // Parse file data
+ struct json_tokener *tokener = json_tokener_new();
+ enum json_tokener_error json_error;
+ char buffer[input_size];
+ int block_cnt = 1;
+ while (1)
+ {
+ size_t len = fread(buffer, sizeof(char), input_size, fp);
+ *obj = json_tokener_parse_ex(tokener, buffer, len);
+ if (nullptr != *obj)
+ {
+ HMI_DEBUG("wm:jh", "File input is success");
+ ret = 0;
+ break;
+ }
+
+ json_error = json_tokener_get_error(tokener);
+ if ((json_tokener_continue != json_error)
+ || (input_size > len))
+ {
+ HMI_ERROR("wm:jh", "Failed to parse file (byte:%d err:%s)",
+ (input_size * block_cnt), json_tokener_error_desc(json_error));
+ HMI_ERROR("wm:jh", "\n%s", buffer);
+ *obj = nullptr;
+ break;
+ }
+ block_cnt++;
+ }
+
+ // Close json file
+ fclose(fp);
+
+ // Free json_tokener
+ json_tokener_free(tokener);
+
+ return ret;
+}
+
+} // namespace jh