summaryrefslogtreecommitdiff
path: root/src/examples/eina/eina_json_03.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/eina/eina_json_03.c')
-rw-r--r--src/examples/eina/eina_json_03.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/examples/eina/eina_json_03.c b/src/examples/eina/eina_json_03.c
new file mode 100644
index 0000000000..9b5a0e113f
--- /dev/null
+++ b/src/examples/eina/eina_json_03.c
@@ -0,0 +1,100 @@
+//Compile with:
+//gcc -g eina_json_03.c -o eina_json_03 `pkg-config --cflags --libs eina`
+
+// This example demonstrates a simple use of a json context SAX parsing
+// with callback function which prints indented json objects
+
+#include "Eina.h"
+
+#define DOERROR(x,args...) { printf(x,## args); return 1; }
+#define BUFFSIZE 100
+
+typedef struct
+{
+ Eina_Strbuf *text;
+ unsigned long parent_idx;
+} Sax_Parser_Data;
+
+char *json_err_name[]={"No error","Lexical error","Syntax Error","Input Past End"};
+
+char *json_type_string[]={"NULL","NUMBER","STRING","BOOLEAN","PAIR","OBJECT","ARRAY"};
+
+char my_json[] =
+"{\n\
+\"String\":\"MyJSON\",\n \
+\"Array\":[1,2,3,true,5,false,\"\",{},null,[78,\"Hello\"],\"World\"],\n \
+\"Object\": { \"Subobj\":{ \"Sub1\":null,\"Sub2\":56} }\n \
+}";
+
+void *
+sax_parser_cb(Eina_Json_Type type, void *parent, const char *text, void *data)
+{
+ Sax_Parser_Data *saxdata = (Sax_Parser_Data *)data;
+ const char* strval = NULL;
+
+ switch(type)
+ {
+ case EINA_JSON_TYPE_NUMBER:
+ case EINA_JSON_TYPE_STRING:
+ case EINA_JSON_TYPE_PAIR:
+ strval = text;
+ break;
+ case EINA_JSON_TYPE_BOOLEAN:
+ strval = (*text == 't') ? "true" : "false";
+ break;
+ }
+
+ saxdata->parent_idx++;
+ eina_strbuf_append_printf(saxdata->text,
+ "(%p) PARENT(%p) TYPE:%s",
+ (void*)saxdata->parent_idx,
+ parent,
+ json_type_string[type]);
+
+ if (strval) eina_strbuf_append_printf(saxdata->text, " = \"%s\"", strval);
+ eina_strbuf_append_char(saxdata->text, '\n');
+
+ return (void*)saxdata->parent_idx;
+}
+
+int
+main(int argc,void **argv)
+{
+ Sax_Parser_Data mysax;
+
+ eina_init();
+
+ mysax.text = eina_strbuf_new();
+ mysax.parent_idx = 1;
+
+ // Its a SAX parsing. We initilize it with our our callback function
+ // and the data to be used by the callback.
+ Eina_Json_Context *ctx = eina_json_context_sax_new(sax_parser_cb, &mysax);
+
+ //Now parse
+ eina_json_context_parse(ctx, my_json);
+
+ //Analize and report results
+ Eina_Json_Error jsnerr = eina_json_context_error_get(ctx);
+ if (jsnerr)
+ {
+ printf ("Parsing failed\n");
+ printf ("Error %d:%d %s\n", eina_json_context_line_get(ctx),
+ eina_json_context_column_get(ctx),
+ json_err_name[jsnerr]);
+ }
+ else if (eina_json_context_completed_get(ctx))
+ {
+ // If parsing was successful - print the text that our callback produced.
+ printf ("File was successfully parsed\n\n");
+ printf("%s\n", eina_strbuf_string_get(mysax.text));
+ }
+ else
+ printf ("Parsing was not completed\n");
+
+ eina_strbuf_free(mysax.text);
+ eina_json_context_free(ctx);
+
+ eina_shutdown();
+ return 0;
+}