1. 背景:

  虚拟机安装的luajit  没有 cjson 库,就不能对 table 进行 编码操作,手动安装一个。

2. 安装:

  cjson下载地址:http://www.kyne.com.au/~mark/software/lua-cjson.php

  下载文件 lua-cjson-2.1.0.tar.gz

  放到虚拟机一个目录,解压,先 make 一下

cc -c -O3 -Wall -pedantic -DNDEBUG  -I/usr/local/include -fpic -o lua_cjson.o lua_cjson.c
lua_cjson.c::: error: lua.h: No such file or directory
lua_cjson.c::: error: lauxlib.h: No such file or directory
lua_cjson.c:: error: expected ‘)’ before ‘*’ token
lua_cjson.c:: error: expected ‘)’ before ‘*’ token
lua_cjson.c:: error: expected ‘)’ before ‘*’ token
lua_cjson.c:: error: expected ‘)’ before ‘*’ token
lua_cjson.c:: error: expected ‘)’ before ‘*’ token
lua_cjson.c:: error: expected ‘)’ before ‘*’ token

  这个报错是没有找到 lua 源码,find 一下lua.h这个文件,发现位于好几个路径下。因为历史原因,都可以使用,选择一个。

/usr/local/src/LuaJIT-2.1.-beta2/src/lua.h
/usr/local/luajit/include/luajit-2.1/lua.h
/usr/local/include/luajit-2.0/lua.h

  修改Makefile文件,修改default配置为

LUA_VERSION =       5.1
TARGET = cjson.so
PREFIX = /usr/local
#CFLAGS = -g -Wall -pedantic -fno-inline
CFLAGS = -O3 -Wall -pedantic -DNDEBUG
CJSON_CFLAGS = -fpic
CJSON_LDFLAGS = -shared
LUA_INCLUDE_DIR = /usr/local/src/LuaJIT-2.1.0-beta2/src/
LUA_CMODULE_DIR = $(PREFIX)/lib/lua/$(LUA_VERSION)
LUA_MODULE_DIR = $(PREFIX)/share/lua/$(LUA_VERSION)
LUA_BIN_DIR = $(PREFIX)/bin

  主要是修改了LUA_INCLUDE_DIR用于安装cjson;修改了PREFIX变量用来改变编译结果文件输出的路径。

  保存,执行命令

make && make install
cc -c -O3 -Wall -pedantic -DNDEBUG -I/usr/local/src/LuaJIT-2.1.-beta2/src/ -fpic -o lua_cjson.o lua_cjson.c
cc -c -O3 -Wall -pedantic -DNDEBUG -I/usr/local/src/LuaJIT-2.1.-beta2/src/ -fpic -o strbuf.o strbuf.c
cc -c -O3 -Wall -pedantic -DNDEBUG -I/usr/local/src/LuaJIT-2.1.-beta2/src/ -fpic -o fpconv.o fpconv.c
cc -shared -o cjson.so lua_cjson.o strbuf.o fpconv.o cp cjson.so /usr/local/lib/lua/5.1/
chmod /usr/local/lib/lua/5.1/cjson.so

3. 使用:

  编码:

local cjson2 = require "cjson"
-- 布尔类型
local lua_bool = true
print(cjson2.encode(lua_bool)) -- 数组类型
local lua_array = {, , , , , }
print(cjson2.encode(lua_array)) -- 数值类型
local lua_number = 6.66
print(cjson2.encode(lua_number)) -- 字符串类型
local lua_string = "I am test1280"
print(cjson2.encode(lua_string)) -- 对象类型
local lua_object = {
["name"] = "Jiang",
["age"] = ,
["addr"] = "BeiJing",
["email"] = "1569989xxxx@126.com",
["tel"] = {f='',d=''}
}
print(cjson2.encode(lua_object)) ===================================

 true
 [1,2,3,4,5,6]
 6.66
 "I am test1280"
 {"addr":"BeiJing","tel":{"d":"456","f":"123"},"age":24,"name":"Jiang","email":"1569989xxxx@126.com"}

  解码:

json = require "cjson"

a= '{"deviceid": "dev","taskid": "","tasktype": "3101","configlist":{"sd_new_old_cp_switch":{"vod":"gitvlive"}}}'
atb=json.decode(a)
print(atb.deviceid)
print(atb.configlist)
print(atb.configlist.sd_new_old_cp_switch.vod)

  一般 用的比较多的就是 把 json 字符串 decode 成 lua 的 table 数据类型。

lua 的 cjson 安装,使用的更多相关文章

  1. Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本

    一.引言         学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...

  2. 【Lua】CJSON的安装

    Lua CJSON 是 Lua 语言提供高性能的 JSON 解析器和编码器,其性能比纯 Lua 库要高 10 到 20 倍.Lua CJSON 完全支持 UTF-8 ,无需依赖其他非 Lua/LuaJ ...

  3. Lua利用cjson读写json示例分享

    本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode,需要的朋友可以参考下 我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能 ...

  4. Lua中cJson的读写

    这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高10~20倍.并且Lua Json完全支持UTF-8,无需以来其他非Lua/LuaJit相关包. 环境安装 ...

  5. Mac + nginx + lua + luasocket + cjson

    1. Lua // 官方网站 http://www.lua.org/ 下载源码包// 由于配合 nginx 使用, 所以使用 5.1.X 版本 $ .tar.gz $ cd lua- $ make m ...

  6. Lua利用cjson读写json

    前言 本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode.我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高 ...

  7. mac下Nginx+lua模块编译安装

    Nginx的nb之处就不说了,lua也是一个小巧的脚本语言,由标准C编写而成,几乎可以运行在所有的平台上,也非常强大,其他特性请自行度娘.nginx_lua_module是由淘宝的工程师清无(王晓哲) ...

  8. Lua 语言环境安装

    Linux 系统上安装(本文使用了5..0版本进行安装:) curl -R -O http://www.lua.org/ftp/lua-.tar.gz tar zxf lua-.tar.gz cd l ...

  9. 【Lua】环境安装与HelloWorld

    emmmm...看了W3C和菜鸟教程的环境安装,感觉还是省略了一些东西的. 记录一下在Windows上怎么开始编写Lua的学习过程. 环境安装 直接在Lua官网上找到最新版的下载地址,根据说明下载Lu ...

随机推荐

  1. python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  2. 问题解决:import paddle.fluid出错:DLL load failed: 找不到指定的模块

    问题描述: 使用Pycharm编程,导入paddlepaddle库出错.即:import paddle.fluid出错:DLL load failed: 找不到指定的模块 解决方法: 补上缺失的DLL ...

  3. scrapy 爬取视频

    利用FilesPipeline 下载视频 1.setting.py # 保存log信息的文件名 LOG_LEVEL = "INFO" # LOG_STDOUT = True # L ...

  4. BZOJ2073 「POI2004」PRZ 状压DP

    问题描述 BZOJ2073 题解 发现 \(n \le 16\) ,显然想到状压 设 \(opt[S]\) 代表过河集合为 \(S\) 时,最小时间. 枚举 \(S\) 的子集,进行转移 枚举子集的方 ...

  5. Jsoup+HttpUnit爬取搜狐新闻

    怎么说呢,静态的页面,但我也写了动态的接口支持,方便后续爬取别的新闻网站使用. 一个接口,接口有一个抽象方法pullNews用于拉新闻,有一个默认方法用于获取新闻首页: public interfac ...

  6. Apache 监听 ipv4

    查看端口信息 ifconfig 发现只有 ipv6 的 80 端口被监听,ipv4 的 80 端口没有被监听 因此通过 ipv4 无法访问 tcp6 0 0 :::80 :::* LISTEN 221 ...

  7. A1039 Course List for Student (25 分)

    一.技术总结 这里由于复杂度的限制,只能够使用vector,然后进行字符串转化:考虑到string.cin.cout会超时,可以使⽤用hash(262626*10+10)将学⽣生姓名变为int型,然后 ...

  8. MySQL实战45讲学习笔记:第三十四讲

    一.本节概述 在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 1. 我们 DBA 不让使用 join,使用 join 有什么问题呢?2. 如果有两个大小不同的表做 join,应该 ...

  9. Paper | Xception: Deep Learning with Depthwise Separable Convolutions

    目录 故事 Inception结构和思想 更进一步,以及现有的深度可分离卷积 Xception结构 实验 这篇论文写得很好.只要你知道卷积操作或公式,哪怕没看过Inception,也能看懂. 核心贡献 ...

  10. MMM的又一周计划[2019 7.1→2019.7.7]

    发现今天是7.1然后又是星期一 来一发吧 本周目标: 1.二分图最佳匹配 2.网络流 3.HH的项链 4.洛谷rk前1000(目前1.1k) (upd:469) 5.AC260(35题,上周A了34, ...