#include <zebra.h>
#include <stdio.h>
+#include "lib/json.h"
#include "printfrr.h"
#include "memory.h"
#include "termtable.h"
return buf;
}
+
+/* Crude conversion from ttable to json array.
+ * Assume that the first row has column headings.
+ *
+ * Formats are:
+ * d int32
+ * f double
+ * l int64
+ * s string (default)
+ */
+json_object *ttable_json(struct ttable *tt, const char *const formats)
+{
+ struct ttable_cell *row; /* iteration pointers */
+ json_object *json = NULL;
+
+ json = json_object_new_array();
+
+ for (int i = 1; i < tt->nrows; i++) {
+ json_object *jobj;
+ json_object *val;
+
+ row = tt->table[i];
+ jobj = json_object_new_object();
+ json_object_array_add(json, jobj);
+ for (int j = 0; j < tt->ncols; j++) {
+ switch (formats[j]) {
+ case 'd':
+ case 'l':
+ val = json_object_new_int64(atol(row[j].text));
+ break;
+ case 'f':
+ val = json_object_new_double(atof(row[j].text));
+ break;
+ default:
+ val = json_object_new_string(row[j].text);
+ }
+ json_object_object_add(jobj, tt->table[0][j].text, val);
+ }
+ }
+
+ return json;
+}
#define _TERMTABLE_H_
#include <zebra.h>
+#include "lib/json.h"
#ifdef __cplusplus
extern "C" {
*/
char *ttable_dump(struct ttable *tt, const char *newline);
+/**
+ * Convert a table to a JSON array of objects.
+ *
+ * Caller must free the returned json_object structure.
+ *
+ * @param tt the table to convert
+ * @param formats an array of characters indicating what JSON type should be
+ * used.
+ */
+json_object *ttable_json(struct ttable *tt, const char *const formats);
+
#ifdef __cplusplus
}
#endif