nx_storage_sdk  1.0
Storage SDK
json.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #pragma once
4 
5 #include <stddef.h>
6 
7 enum JsonType
8 {
9  jsonStringT,
10  jsonNumberT,
11  jsonObjectT,
12  jsonArrayT,
13  jsonTrueT,
14  jsonFalseT,
15  jsonNullT,
16 };
17 
18 struct JsonVal
19 {
20  enum JsonType type;
21  union
22  {
23  char *string;
24  long double number;
25  struct {
26  char **keys;
27  struct JsonVal *values;
28  int len;
29  } object;
30  struct {
31  struct JsonVal *values;
32  int len;
33  } array;
34  } u;
35 };
36 
37 
38 struct JsonVal jsonParseString(const char *str, char *errorBuf, int errorBufSize);
39 
40 /*creates empty (top-level) object*/
41 struct JsonVal jsonCreateObject();
42 
43 /*check type functions*/
44 int JsonVal_isString(const struct JsonVal *val);
45 int JsonVal_isNumber(const struct JsonVal *val);
46 int JsonVal_isObject(const struct JsonVal *val);
47 int JsonVal_isArray(const struct JsonVal *val);
48 int JsonVal_isTrue(const struct JsonVal *val);
49 int JsonVal_isFalse(const struct JsonVal *val);
50 int JsonVal_isNull(const struct JsonVal *val);
51 
52 /*add subvalues to existing values. return pointers to the newly created values.*/
53 struct JsonVal *JsonVal_objectAddString(struct JsonVal *val, const char *key, const char *value);
54 struct JsonVal *JsonVal_objectAddNumber(struct JsonVal *val, const char *key, long double number);
55 struct JsonVal *JsonVal_objectAddObject(struct JsonVal *val, const char *key);
56 struct JsonVal *JsonVal_objectAddArray(struct JsonVal *val, const char *key);
57 struct JsonVal *JsonVal_objectAddTrue(struct JsonVal *val, const char *key);
58 struct JsonVal *JsonVal_objectAddFalse(struct JsonVal *val, const char *key);
59 struct JsonVal *JsonVal_objectAddNull(struct JsonVal *val, const char *key);
60 
61 struct JsonVal *JsonVal_arrayAddString(struct JsonVal *val, const char *value);
62 struct JsonVal *JsonVal_arrayAddNumber(struct JsonVal *val, long double number);
63 struct JsonVal *JsonVal_arrayAddObject(struct JsonVal *val);
64 struct JsonVal *JsonVal_arrayAddArray(struct JsonVal *val);
65 struct JsonVal *JsonVal_arrayAddTrue(struct JsonVal *val);
66 struct JsonVal *JsonVal_arrayAddFalse(struct JsonVal *val);
67 struct JsonVal *JsonVal_arrayAddNull(struct JsonVal *val);
68 
69 /*access functions*/
70 int JsonVal_arrayLen(struct JsonVal *val);
71 struct JsonVal *JsonVal_arrayAt(struct JsonVal* val, int index);
72 
73 struct JsonVal *JsonVal_getObjectValueByKey(const struct JsonVal *val, const char *key);
74 
75 void JsonVal_forEachArrayElement(
76  const struct JsonVal *val,
77  void *ctx,
78  void (*action)(void *, const struct JsonVal *));
79 
80 void JsonVal_forEachObjectElement(
81  const struct JsonVal *val,
82  void *ctx,
83  void (*action)(void *, const char *key, const struct JsonVal *));
84 
85 /*write functions*/
86 int JsonVal_write(
87  const struct JsonVal *val,
88  /*User context. Will be passed to the writeFunc callback.*/
89  void *ctx,
90  /*user supplied write callback function.*/
91  int (*writeFunc)(void *ctx, void *buf, int len));
92 
93 /*returns total bytes required*/
94 int JsonVal_writeString(const struct JsonVal *val, char *buf, int len);
95 
96 void JsonVal_destroy(struct JsonVal *val);
Definition: json.h:18