]> saetta.ns0.it Git - libzakutilsjsonxml/commitdiff
Added functions ::json_parse_*.
authorAndrea Zagli <azagli@libero.it>
Sun, 30 Aug 2020 08:17:22 +0000 (10:17 +0200)
committerAndrea Zagli <azagli@libero.it>
Sun, 30 Aug 2020 08:17:22 +0000 (10:17 +0200)
src/json.c
src/json.h

index 4678d0c7f4fbdf7444555a00ff3322afc71f7e75..3ce409fc490f95e00fe33be7c6411daecb191223 100644 (file)
 
 #include "json.h"
 
+JsonNode
+*zak_utils_json_parse_file (const gchar *filename)
+{
+       JsonParser *parser;
+
+       GError *error;
+
+       JsonNode *ret;
+
+       JsonNode *root;
+
+       parser = json_parser_new ();
+
+       error = NULL;
+       if (json_parser_load_from_file (parser, filename, &error))
+               {
+                       root = json_parser_get_root (parser);
+                       if (root != NULL)
+                               {
+                                       ret = json_node_copy (root);
+                               }
+               }
+       else
+               {
+                       g_warning ("Error on parsing json file: %s",
+                                  error != NULL && error->message != NULL ? error->message : "no details");
+                       ret = NULL;
+               }
+
+       g_object_unref (parser);
+
+       return ret;
+}
+
+JsonNode
+*zak_utils_json_parse_data (const gchar *data)
+{
+       JsonParser *parser;
+
+       GError *error;
+
+       JsonNode *ret;
+
+       JsonNode *root;
+
+       parser = json_parser_new ();
+
+       error = NULL;
+       if (json_parser_load_from_data (parser, data, -1, &error))
+               {
+                       root = json_parser_get_root (parser);
+                       if (root != NULL)
+                               {
+                                       ret = json_node_copy (root);
+                               }
+               }
+       else
+               {
+                       g_warning ("Error on parsing json data: %s",
+                                  error != NULL && error->message != NULL ? error->message : "no details");
+                       ret = NULL;
+               }
+
+       g_object_unref (parser);
+
+       return ret;
+}
+
 JsonNode
 *zak_utils_json_node_new_array ()
 {
index 5eb69866a80ab620a789365c42afbf0ccfa97b6c..90dbdd24ae1b3ff9a29a83565b59002393081800 100644 (file)
@@ -31,6 +31,9 @@
 G_BEGIN_DECLS
 
 
+JsonNode *zak_utils_json_parse_file (const gchar *filename);
+JsonNode *zak_utils_json_parse_data (const gchar *data);
+
 JsonNode *zak_utils_json_node_new_array (void);
 JsonNode *zak_utils_json_node_new_object (void);