cocos2d-2.16 lua 集成cjson 详细步骤 为菜鸟(我就是菜鸟)

表述一下自己要解决的问题:后台服务器同json传送到前端的数据是utf-8格式的,其中中文会变成类似"\\u4e2d\\u6587\" 的东西,直接使用cocos自带的json.lua 是不能解析的,json.lua中碰到'\'直接终止了 源码如下:
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这个文件,修改如下

cocos2d-2.16 lua 集成cjson 详细步骤 为菜鸟(我就是菜鸟)_第1张图片

3 用vs打开  项目根目录\frameworks\runtime-src\proj.win32\项目名.sln,成功打开后,找到项目结构,找到工程libluacocos2d,将cjson项目加进去,加进去后如图:cocos2d-2.16 lua 集成cjson 详细步骤 为菜鸟(我就是菜鸟)_第2张图片,没有加进去是没有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\"}" 转换成了“中文”两个字
cocos2d-2.16 lua 集成cjson 详细步骤 为菜鸟(我就是菜鸟)_第3张图片

你可能感兴趣的:(Lua,cocoslua)