mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-08 02:52:09 +00:00
lib: convert termtable to json
Add a function that returns a JSON-C structure containing a representation of a termtable. This is intended to be a quick way to implement JSON output to CLI commands. Signed-off-by: Eric Kinzie <ekinzie@labn.net>
This commit is contained in:
parent
06ddebc822
commit
42bf1afa5a
@ -7,6 +7,7 @@
|
|||||||
#include <zebra.h>
|
#include <zebra.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "lib/json.h"
|
||||||
#include "printfrr.h"
|
#include "printfrr.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "termtable.h"
|
#include "termtable.h"
|
||||||
@ -485,3 +486,45 @@ char *ttable_dump(struct ttable *tt, const char *newline)
|
|||||||
|
|
||||||
return buf;
|
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;
|
||||||
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define _TERMTABLE_H_
|
#define _TERMTABLE_H_
|
||||||
|
|
||||||
#include <zebra.h>
|
#include <zebra.h>
|
||||||
|
#include "lib/json.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -277,6 +278,17 @@ void ttable_rowseps(struct ttable *tt, unsigned int row,
|
|||||||
*/
|
*/
|
||||||
char *ttable_dump(struct ttable *tt, const char *newline);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user