summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/jansson-e23f558/examples/simple_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/jansson-e23f558/examples/simple_parse.c')
-rw-r--r--fluent-bit/lib/jansson-e23f558/examples/simple_parse.c200
1 files changed, 200 insertions, 0 deletions
diff --git a/fluent-bit/lib/jansson-e23f558/examples/simple_parse.c b/fluent-bit/lib/jansson-e23f558/examples/simple_parse.c
new file mode 100644
index 000000000..a96a0f831
--- /dev/null
+++ b/fluent-bit/lib/jansson-e23f558/examples/simple_parse.c
@@ -0,0 +1,200 @@
+/*
+ * Simple example of parsing and printing JSON using jansson.
+ *
+ * SYNOPSIS:
+ * $ examples/simple_parse
+ * Type some JSON > [true, false, null, 1, 0.0, -0.0, "", {"name": "barney"}]
+ * JSON Array of 8 elements:
+ * JSON True
+ * JSON False
+ * JSON Null
+ * JSON Integer: "1"
+ * JSON Real: 0.000000
+ * JSON Real: -0.000000
+ * JSON String: ""
+ * JSON Object of 1 pair:
+ * JSON Key: "name"
+ * JSON String: "barney"
+ *
+ * Copyright (c) 2014 Robert Poor <rdpoor@gmail.com>
+ *
+ * Jansson is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See LICENSE for details.
+ */
+
+#include <jansson.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* forward refs */
+void print_json(json_t *root);
+void print_json_aux(json_t *element, int indent);
+void print_json_indent(int indent);
+const char *json_plural(size_t count);
+void print_json_object(json_t *element, int indent);
+void print_json_array(json_t *element, int indent);
+void print_json_string(json_t *element, int indent);
+void print_json_integer(json_t *element, int indent);
+void print_json_real(json_t *element, int indent);
+void print_json_true(json_t *element, int indent);
+void print_json_false(json_t *element, int indent);
+void print_json_null(json_t *element, int indent);
+
+void print_json(json_t *root) { print_json_aux(root, 0); }
+
+void print_json_aux(json_t *element, int indent) {
+ switch (json_typeof(element)) {
+ case JSON_OBJECT:
+ print_json_object(element, indent);
+ break;
+ case JSON_ARRAY:
+ print_json_array(element, indent);
+ break;
+ case JSON_STRING:
+ print_json_string(element, indent);
+ break;
+ case JSON_INTEGER:
+ print_json_integer(element, indent);
+ break;
+ case JSON_REAL:
+ print_json_real(element, indent);
+ break;
+ case JSON_TRUE:
+ print_json_true(element, indent);
+ break;
+ case JSON_FALSE:
+ print_json_false(element, indent);
+ break;
+ case JSON_NULL:
+ print_json_null(element, indent);
+ break;
+ default:
+ fprintf(stderr, "unrecognized JSON type %d\n", json_typeof(element));
+ }
+}
+
+void print_json_indent(int indent) {
+ int i;
+ for (i = 0; i < indent; i++) {
+ putchar(' ');
+ }
+}
+
+const char *json_plural(size_t count) { return count == 1 ? "" : "s"; }
+
+void print_json_object(json_t *element, int indent) {
+ size_t size;
+ const char *key;
+ json_t *value;
+
+ print_json_indent(indent);
+ size = json_object_size(element);
+
+ printf("JSON Object of %lld pair%s:\n", (long long)size, json_plural(size));
+ json_object_foreach(element, key, value) {
+ print_json_indent(indent + 2);
+ printf("JSON Key: \"%s\"\n", key);
+ print_json_aux(value, indent + 2);
+ }
+}
+
+void print_json_array(json_t *element, int indent) {
+ size_t i;
+ size_t size = json_array_size(element);
+ print_json_indent(indent);
+
+ printf("JSON Array of %lld element%s:\n", (long long)size, json_plural(size));
+ for (i = 0; i < size; i++) {
+ print_json_aux(json_array_get(element, i), indent + 2);
+ }
+}
+
+void print_json_string(json_t *element, int indent) {
+ print_json_indent(indent);
+ printf("JSON String: \"%s\"\n", json_string_value(element));
+}
+
+void print_json_integer(json_t *element, int indent) {
+ print_json_indent(indent);
+ printf("JSON Integer: \"%" JSON_INTEGER_FORMAT "\"\n", json_integer_value(element));
+}
+
+void print_json_real(json_t *element, int indent) {
+ print_json_indent(indent);
+ printf("JSON Real: %f\n", json_real_value(element));
+}
+
+void print_json_true(json_t *element, int indent) {
+ (void)element;
+ print_json_indent(indent);
+ printf("JSON True\n");
+}
+
+void print_json_false(json_t *element, int indent) {
+ (void)element;
+ print_json_indent(indent);
+ printf("JSON False\n");
+}
+
+void print_json_null(json_t *element, int indent) {
+ (void)element;
+ print_json_indent(indent);
+ printf("JSON Null\n");
+}
+
+/*
+ * Parse text into a JSON object. If text is valid JSON, returns a
+ * json_t structure, otherwise prints and error and returns null.
+ */
+json_t *load_json(const char *text) {
+ json_t *root;
+ json_error_t error;
+
+ root = json_loads(text, 0, &error);
+
+ if (root) {
+ return root;
+ } else {
+ fprintf(stderr, "json error on line %d: %s\n", error.line, error.text);
+ return (json_t *)0;
+ }
+}
+
+/*
+ * Print a prompt and return (by reference) a null-terminated line of
+ * text. Returns NULL on eof or some error.
+ */
+char *read_line(char *line, int max_chars) {
+ printf("Type some JSON > ");
+ fflush(stdout);
+ return fgets(line, max_chars, stdin);
+}
+
+/* ================================================================
+ * main
+ */
+
+#define MAX_CHARS 4096
+
+int main(int argc, char *argv[]) {
+ char line[MAX_CHARS];
+
+ if (argc != 1) {
+ fprintf(stderr, "Usage: %s\n", argv[0]);
+ exit(-1);
+ }
+
+ while (read_line(line, MAX_CHARS) != (char *)NULL) {
+
+ /* parse text into JSON structure */
+ json_t *root = load_json(line);
+
+ if (root) {
+ /* print and release the JSON structure */
+ print_json(root);
+ json_decref(root);
+ }
+ }
+
+ return 0;
+}