local escaped = false
local endPos = startPos + 1
local bEnded = false
local stringLen = string.len(s)
repeat
local curChar = string.sub(s,endPos,endPos)
if not escaped then
if curChar==[[\]] then
escaped = true
else
bEnded = curChar==startChar
end
else
-- If we're escaped, we accept the current character come what may
escaped = false
end
endPos = endPos + 1
base.assert(endPos <= stringLen+1, "String decoding failed: unterminated string at position " .. endPos)
until bEnded
然后考虑解决办法,网上搜了一些资料,发现cjson可以解析,于是搜索cocos 怎么加入cjson,然后根据网上教程修改lua_extensions.h文件,编译发现报错 LNK2001: unresolved external symbol _luaopen_cjson ,然后找了很久也没找到答案。后来只能自己摸了。最后发现应该是自己少了一步。就是别人博客里面说加入cjson项目,我没注意,其实这很重要,没有加入cjson到工程里,导致后面编译的lib没有连接函数,最后会报这个错误。下面是详细的步骤:
1.新建lua工程
2.找到 项目根目录\frameworks\cocos2d-x\cocos\scripting\lua-bindings\manual\network\lua_extensions.c这个文件,修改如下
3 用vs打开 项目根目录\frameworks\runtime-src\proj.win32\项目名.sln,成功打开后,找到项目结构,找到工程libluacocos2d,将cjson项目加进去,加进去后如图:,没有加进去是没有cjson这个目录的,(注:cjson这个文件夹以及源文件在目录:项目根目录\frameworks\cocos2d-x\external\lua\cjson,怎么加进去(右键->add->新建文件夹,然后右键->add->添加现有项,将cjson里的文件全部添加进去)),这时候再编译就不会再报link2001了。
测试:
cjson = require("cjson")
dump(cjson.decode(cjson.decode("{\"token\": \"XMZbVLnnSxLeb3AtqkQI01GK\", \"account\": \"f0cf9c3fe76c59ccc4600149362229a2WX\", \"result\": \"SUCCESS\", \"headerpath\": \"http://wx.qlogo.cn/mmopen/vi_32/QNOtMJhK51GBLqooA34iahAdJtX1NoOicEDiajiczkvxPz9oJSpnrR1xLrSBCxFqImdMss60ibkF8rqvuT2UqZAv8lA/0\", \"msgid\": \"1001\", \"maxcoin\": 5906550, \"coin\": 532405, \"signDays\": 1, \"signed\": 0, \"name\": \"\\u4e2d\\u6587\"}"));
结果如图:
其中的
"\\u4e2d\\u6587\"}" 转换成了“中文”两个字