文档章节

lua cjson数字问题

梦想游戏人
 梦想游戏人
发布于 2018/07/23 16:54
字数 306
阅读 122
收藏 0

在cjson的lua5.3版本中,对于数字 都是按照double来处理的 需要修改一下源代码 来正确处理 integer 还是double

添加类型 T_INT 表示 整数 


static void json_next_number_token(json_parse_t *json, json_token_t *token)
{
	char *endptr;
	//	token->type = T_NUMBER;
	//token->value.number
	double value = fpconv_strtod(json->ptr, &endptr);
	if (json->ptr == endptr)
	{
		token->type = T_NUMBER;
		token->value.number = value;
		json_set_token_error(token, json, "invalid number");
	}
	else
	{
		//scaning the str has dot-operation
		char *start = (char*)json->ptr;
		bool is_int = true;
		while (start != endptr)
		{
			if (*start == '.')
			{
				//this is int
				is_int = false;
				break;
			}
			++start;
		}
		if (is_int)
		{
			token->type = T_INT;
			token->value.integer = (long long)value;
		}
		else
		{
			token->type = T_NUMBER;
			token->value.number = value;
		}
		json->ptr = endptr;     /* Skip the processed number */
	}
	return;
}

修改一下 token 类型处理 (push到lua的数据类型)


/* Handle the "value" context */
static void json_process_value(lua_State *l, json_parse_t *json,
	json_token_t *token)
{
	switch (token->type) {
	case T_STRING:
		lua_pushlstring(l, token->value.string, token->string_len);
		break;;
	case T_NUMBER:
		lua_pushnumber(l, token->value.number);
		break;;
	case T_INT:
		lua_pushinteger(l, token->value.integer);
		break;;
	case T_BOOLEAN:
		lua_pushboolean(l, token->value.boolean);
		break;;
	case T_OBJ_BEGIN:
		json_parse_object_context(l, json);
		break;;
	case T_ARR_BEGIN:
		json_parse_array_context(l, json);
		break;;
	case T_NULL:
		/* In Lua, setting "t[k] = nil" will delete k from the table.
		 * Hence a NULL pointer lightuserdata object is used instead */
		lua_pushlightuserdata(l, NULL);
		break;;
	default:
		json_throw_parse_error(l, json, "value", token);
	}
}

重新编译 即可

© 著作权归作者所有

共有 人打赏支持
下一篇: 编译cjson到dll
梦想游戏人
粉丝 36
博文 437
码字总数 124258
作品 0
成都
私信 提问
Lua CJSON 1.0.4 发布,Lua 的 JSON 处理器

Lua CJSON 1.0.4 发布了,该版本修复了在 locale 下的数字转换问题。 Lua CJSON 为 Lua 语言提供高性能的 JSON 解析器和编码器,其性能比纯 Lua 库要高 10 到 20 倍。Lua CJSON 完全支持 UT...

红薯
2011/11/30
914
4
emqtt_lua_hook开发问题

@emqtt 你好,想跟你请教个问题: 在lua_hook中,想使用cjson这个so包时报错,请问为什么在hook中无法加载so包? emqttd/hook_lua/test.lua 而在外部lua脚本内使用cjson没有问题 test.lua [...

skypeng123
2017/09/12
52
0
Openresty最佳案例 | 第5篇:http和C_json模块

转载请标明出处: http://blog.csdn.net/forezp/article/details/78616672 本文出自方志朋的博客 http客户端 Openresty没有提供默认的Http客户端,需要下载第三方的http客户端。 下载lua-res...

forezp
2017/11/23
0
0
Lua CJSON 2.0 发布,Lua 的JSON处理器

Lua CJSON 2.0 发布了,该版本提升了性能和可移植性,另外增加对 Lua 5.2 的支持。 Lua CJSON 为 Lua 语言提供高性能的 JSON 解析器和编码器,其性能比纯 Lua 库要高 10 到 20 倍。Lua CJSON...

红薯
2012/01/23
1K
1
Lua CJSON 2.1.0 发布

Lua CJSON 2.1.0 发布了,该版本新增一个 cjson.safe 模块接口,该接口在解析错误时不抛出异常,而是返回 nil,改进了 Makefile 在solaris 下的兼容性。 Lua CJSON 为 Lua 语言提供高性能的 ...

红薯
2012/03/02
3.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
5
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
2
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
3
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部