mirror of
https://github.com/majonezz/solarlife.git
synced 2026-05-05 05:02:19 +02:00
95 lines
3.0 KiB
C
95 lines
3.0 KiB
C
#pragma once
|
|
|
|
#include <stddef.h>
|
|
|
|
enum JsonType
|
|
{
|
|
jsonStringT,
|
|
jsonNumberT,
|
|
jsonObjectT,
|
|
jsonArrayT,
|
|
jsonTrueT,
|
|
jsonFalseT,
|
|
jsonNullT,
|
|
};
|
|
|
|
struct JsonVal
|
|
{
|
|
enum JsonType type;
|
|
union
|
|
{
|
|
char *string;
|
|
long double number;
|
|
struct {
|
|
char **keys;
|
|
struct JsonVal *values;
|
|
int len;
|
|
} object;
|
|
struct {
|
|
struct JsonVal *values;
|
|
int len;
|
|
} array;
|
|
} u;
|
|
};
|
|
|
|
|
|
struct JsonVal jsonParseString(const char *str, char *errorBuf, int errorBufSize);
|
|
|
|
/*creates empty (top-level) object*/
|
|
struct JsonVal jsonCreateObject();
|
|
|
|
/*check type functions*/
|
|
int JsonVal_isString(const struct JsonVal *val);
|
|
int JsonVal_isNumber(const struct JsonVal *val);
|
|
int JsonVal_isObject(const struct JsonVal *val);
|
|
int JsonVal_isArray(const struct JsonVal *val);
|
|
int JsonVal_isTrue(const struct JsonVal *val);
|
|
int JsonVal_isFalse(const struct JsonVal *val);
|
|
int JsonVal_isNull(const struct JsonVal *val);
|
|
|
|
/*add subvalues to existing values. return pointers to the newly created values.*/
|
|
struct JsonVal *JsonVal_objectAddString(struct JsonVal *val, const char *key, const char *value);
|
|
struct JsonVal *JsonVal_objectAddNumber(struct JsonVal *val, const char *key, long double number);
|
|
struct JsonVal *JsonVal_objectAddObject(struct JsonVal *val, const char *key);
|
|
struct JsonVal *JsonVal_objectAddArray(struct JsonVal *val, const char *key);
|
|
struct JsonVal *JsonVal_objectAddTrue(struct JsonVal *val, const char *key);
|
|
struct JsonVal *JsonVal_objectAddFalse(struct JsonVal *val, const char *key);
|
|
struct JsonVal *JsonVal_objectAddNull(struct JsonVal *val, const char *key);
|
|
|
|
struct JsonVal *JsonVal_arrayAddString(struct JsonVal *val, const char *value);
|
|
struct JsonVal *JsonVal_arrayAddNumber(struct JsonVal *val, long double number);
|
|
struct JsonVal *JsonVal_arrayAddObject(struct JsonVal *val);
|
|
struct JsonVal *JsonVal_arrayAddArray(struct JsonVal *val);
|
|
struct JsonVal *JsonVal_arrayAddTrue(struct JsonVal *val);
|
|
struct JsonVal *JsonVal_arrayAddFalse(struct JsonVal *val);
|
|
struct JsonVal *JsonVal_arrayAddNull(struct JsonVal *val);
|
|
|
|
/*access functions*/
|
|
int JsonVal_arrayLen(struct JsonVal *val);
|
|
struct JsonVal *JsonVal_arrayAt(struct JsonVal* val, int index);
|
|
|
|
struct JsonVal *JsonVal_getObjectValueByKey(const struct JsonVal *val, const char *key);
|
|
|
|
void JsonVal_forEachArrayElement(
|
|
const struct JsonVal *val,
|
|
void *ctx,
|
|
void (*action)(void *, const struct JsonVal *));
|
|
|
|
void JsonVal_forEachObjectElement(
|
|
const struct JsonVal *val,
|
|
void *ctx,
|
|
void (*action)(void *, const char *key, const struct JsonVal *));
|
|
|
|
/*write functions*/
|
|
int JsonVal_write(
|
|
const struct JsonVal *val,
|
|
/*User context. Will be passed to the writeFunc callback.*/
|
|
void *ctx,
|
|
/*user supplied write callback function.*/
|
|
int (*writeFunc)(void *ctx, void *buf, int len));
|
|
|
|
/*returns total bytes required*/
|
|
int JsonVal_writeString(const struct JsonVal *val, char *buf, int len);
|
|
|
|
void JsonVal_destroy(struct JsonVal *val);
|