mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-21 01:18:02 +00:00
- meta: CORE_PLUGIN_RELOAD_ONE(48) / LIST_LOADED(49) / IS_DISABLED(50) - sdk: PluginMgrAPI 接口(ReloadOne/ListLoadedPlugins/IsPluginDisabled) + PluginSDK.SetPluginMgrAPI/PluginMgr() 访问器 - plugindev 模板: dispatchPluginMgr 桥接注入,走 C ABI 48/49/50
107 lines
3.3 KiB
C
107 lines
3.3 KiB
C
#ifndef HA_JSON_H
|
||
#define HA_JSON_H
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/* ======================== JSON 解析器(DOM 风格) ======================== */
|
||
typedef enum {
|
||
HA_JSON_NULL,
|
||
HA_JSON_BOOL,
|
||
HA_JSON_INT,
|
||
HA_JSON_STRING,
|
||
HA_JSON_ARRAY,
|
||
HA_JSON_OBJECT,
|
||
} ha_json_type_t;
|
||
|
||
typedef struct ha_json_node {
|
||
ha_json_type_t type;
|
||
union {
|
||
int bool_val;
|
||
int int_val;
|
||
char *str_val;
|
||
};
|
||
struct ha_json_node *next; /* linked list for array/object items */
|
||
struct ha_json_node *child; /* first child for array/object */
|
||
char *key; /* key for object members */
|
||
} ha_json_node_t;
|
||
|
||
/* 解析 JSON 字符串,返回根节点。失败返回 NULL。 */
|
||
ha_json_node_t *ha_json_parse(const char *str);
|
||
|
||
/* 从对象中按 key 获取字符串值,不存在返回 NULL */
|
||
const char *ha_json_get_string(const ha_json_node_t *obj, const char *key);
|
||
|
||
/* 从对象中按 key 获取 int 值,不存在返回 def */
|
||
int ha_json_get_int(const ha_json_node_t *obj, const char *key, int def);
|
||
|
||
/* 从对象中按 key 获取子节点,不存在返回 NULL */
|
||
ha_json_node_t *ha_json_get(const ha_json_node_t *obj, const char *key);
|
||
|
||
/* 获取数组长度 */
|
||
int ha_json_array_len(const ha_json_node_t *arr);
|
||
|
||
/* 获取数组第 index 个元素,越界返回 NULL */
|
||
ha_json_node_t *ha_json_array_get(const ha_json_node_t *arr, int index);
|
||
|
||
/* 释放整个 JSON 树 */
|
||
void ha_json_free(ha_json_node_t *root);
|
||
|
||
/* ======================== JSON 构建器(直接写缓冲区) ======================== */
|
||
typedef struct {
|
||
char *buf;
|
||
int len;
|
||
int cap;
|
||
int depth;
|
||
int item_count[16]; /* 每层已添加元素数,用于逗号判断 */
|
||
} ha_json_builder_t;
|
||
|
||
/* 初始化构建器 */
|
||
void ha_json_builder_init(ha_json_builder_t *jb, char *buf, int cap);
|
||
|
||
/* 清空构建器 */
|
||
void ha_json_builder_reset(ha_json_builder_t *jb);
|
||
|
||
/* 基础写入 */
|
||
void ha_json_builder_raw(ha_json_builder_t *jb, const char *s);
|
||
|
||
/* 逗号(自动判断是否需要加) */
|
||
void ha_json_builder_comma(ha_json_builder_t *jb);
|
||
|
||
/* 对象 */
|
||
void ha_json_builder_begin_object(ha_json_builder_t *jb);
|
||
void ha_json_builder_end_object(ha_json_builder_t *jb);
|
||
|
||
/* 数组 */
|
||
void ha_json_builder_begin_array(ha_json_builder_t *jb);
|
||
void ha_json_builder_end_array(ha_json_builder_t *jb);
|
||
|
||
/* 键名 */
|
||
void ha_json_builder_key(ha_json_builder_t *jb, const char *key);
|
||
|
||
/* 值 */
|
||
void ha_json_builder_add_string(ha_json_builder_t *jb, const char *val);
|
||
void ha_json_builder_add_int(ha_json_builder_t *jb, int val);
|
||
void ha_json_builder_add_bool(ha_json_builder_t *jb, int val);
|
||
void ha_json_builder_add_null(ha_json_builder_t *jb);
|
||
|
||
/* 快捷方法:直接写 "key":"val" */
|
||
void ha_json_builder_string(ha_json_builder_t *jb, const char *key, const char *val);
|
||
void ha_json_builder_int(ha_json_builder_t *jb, const char *key, int val);
|
||
void ha_json_builder_bool(ha_json_builder_t *jb, const char *key, int val);
|
||
|
||
/* 获取当前构建的字符串指针 */
|
||
const char *ha_json_builder_str(ha_json_builder_t *jb);
|
||
|
||
/* 获取当前长度 */
|
||
int ha_json_builder_len(ha_json_builder_t *jb);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* HA_JSON_H */ |