Exjson 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Exjson 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议: LGPL
开发语言: C/C++
操作系统: 跨平台
收录时间: 2019-05-10

C语言JSON解析库:Exjson

什么是Exjson?

Exjson是一款高性能的基于Flex & Bison的 JSON 解析器,Xserver引擎自带,其他需要使用的只需要引入几个头文件和源文件即可

Exjson适应场合

Exjson适合于在需要在底层C语言或者C++语言层面使用 JSON 功能的场景。目前大部分接口使用的都是 JSON 格式传输,后面增加 xml解析库

注意

Exjson支持注释,Exjson中注释以 # 或者// 开头,一直延续到行尾,如下是合格的 Exjson格式

{
    "name": "Exjson", // 名字:Exjson
    "version": "1.0", # 版本号
    "platform": [ "MacOSX", "Linux", "Windows" ]
}

APIs

// 生成一个EXJSON对象
EXJSON_API EXJSON * INIT_EXJSON();

// 生成一个 string: long int 的键值对
EXJSON_API int add_object_int(EXJSON *exjson, char *key, long val);

// 生成一个 string: double 的键值对
EXJSON_API int add_object_double(EXJSON *exjson, char *key, double val);

// 生成一个 string : string 的键值对
EXJSON_API int add_object_string(EXJSON *exjson, char *key, char *val);

// 生成一个 string: {} 的键值对
EXJSON_API int add_object_object(EXJSON *exjson, char *key, void *val);

// 生成一个 string: [] 的键值对
EXJSON_API int add_object_array(EXJSON *exjson, char *key, void *val);
// 上面添加方法的一个通用函数
EXJSON_API int add_object_ptr(EXJSON *exjson, char *key, void *val, unsigned char val_type);

// 生成一个 long int 的一个数组元素
EXJSON_API int add_array_int(EXJSON *exjson, long val);

// 生成一个 double 的一个数组元素
EXJSON_API int add_array_double(EXJSON *exjson, double val);

// 生成一个 string 的一个数组元素
EXJSON_API int add_array_string(EXJSON *exjson, char *val);

// 生成一个 对象{} 的一个数组元素
EXJSON_API int add_array_object(EXJSON *exjson, void *val);

// 生成一个 数组的 的一个数组元素
EXJSON_API int add_array_array(EXJSON *exjson, void *val);
// 上面方法的通用函数
EXJSON_API int add_array_ptr(EXJSON *exjson, void *val, unsigned char val_type);

// 打印 EXJSON 信息
PRINT_EXJSON(exjson);

// 从 EXJSON结构中获取数据
EXJSON_API void *exjson_get_val_from_key(EXJSON *exjson, char *key);
EXJSON_API void *exjson_get_val_from_index(EXJSON *exjson, int index);

// 编码JSON字符串为EXJSON结构
EXJSON_API extern EXJSON *decode_json(char *json_string);
// EXJSON结构解码为JSON字符串
EXJSON_API char *encode_json(EXJSON *exjson);
// 使用完毕后,需要释放内存
EXJSON_API void destroy_exjson(EXJSON *exjson);

示例

#include <stdio.h>
#include "exjson.h"


int main(int argc, char *argv[])
{
    EXJSON *v = decode_json("{\n"
                            "    \"b\": 100,\n"
                            "    \"a\":{\n"
                            "        \"a\": \"b\"\n"
                            "    }\n"
                            "}");
	// 返回的字符串因为分配了内存,需要手动释放
    char *str = encode_json(v);
    printf("%s", str);
    free(str);
    destroy_exjson(v);
    return 0;
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

Exjson 的相关资讯

还没有任何资讯

Exjson 的相关博客

C语言JSON解析库:Exjson

https://gitee.com/josinli/Exjson

Exjson 的相关问答

还没有任何问答,马上提问

评论 (11)

加载中

引用来自“dwingo”的评论

好像这类库都喜欢声称"高性能", 跟RapidJSON比一下如何呢?
😂
2019/05/26 21:37
回复
举报

引用来自“tengyz”的评论

JAVA能调用吗

引用来自“开源中国首席C菜鸟”的评论

可以通过jni使用

引用来自“开源中国首席C菜鸟”的评论

您可以自己测试对比,Exjson只提供本身性能测试

引用来自“开源中国首席C菜鸟”的评论

嗯,每个库都有各自的优缺点,可以根据情况实际选择的
Exjson是纯C的库,不是C++开发的
2019/05/23 19:11
回复
举报

引用来自“tengyz”的评论

JAVA能调用吗

引用来自“开源中国首席C菜鸟”的评论

可以通过jni使用

引用来自“开源中国首席C菜鸟”的评论

您可以自己测试对比,Exjson只提供本身性能测试
嗯,每个库都有各自的优缺点,可以根据情况实际选择的
2019/05/23 19:09
回复
举报

引用来自“tengyz”的评论

JAVA能调用吗

引用来自“开源中国首席C菜鸟”的评论

可以通过jni使用
您可以自己测试对比,Exjson只提供本身性能测试
2019/05/23 18:42
回复
举报

引用来自“tengyz”的评论

JAVA能调用吗
可以通过jni使用
2019/05/23 18:26
回复
举报
JAVA能调用吗
2019/05/23 12:19
回复
举报
fasterjson+DirectStruct直接把json文本映射到C结构体里,无需EXJSON对象。杭州银行核心系统已大量使用了。
2019/05/23 12:00
回复
举报
好像这类库都喜欢声称"高性能", 跟RapidJSON比一下如何呢?
2019/05/23 09:59
回复
举报
有否性能对比?
2019/05/23 09:40
回复
举报
多一个选择,已知使用jsoncpp
2019/05/23 09:24
回复
举报
更多评论
11 评论
61 收藏
分享
返回顶部
顶部