在cocos2dx for lua中,我们经常通过lua的table传入c++使用,然后早c++层操作数据。

实现步骤大致如下:

table->string->c++层->通过rapidjson解析->存放在map中管理

在lua中,转换table大致如下

local tbl = {}

tbl["fang"] = 1

tbl["jian"] = 1.4

tbl["heng"] = true

tbl["fjh"] = 12345677

tbl["what"] = "fuck"

local str = json.encode(tbl)

--打印str:

{"fang":1,"jian":1.4,"heng":true,"fjh":12345677,"what":"fuck"}

将str传入c++层,通过rapidjson::Document进行解析str,然而,json字符串中的数据类型不确定,

但触控已经封装好了一个CCLValue类给我们使用,它能存放任何值简单的数据类型进行保存,然后需要的

时候再进行获取。这里提供CCLValue.h和CCLValue两个文件下载:

http://pan.baidu.com/s/1c06Z0xM

以下方法是通过字符串转换成map保存的方法:

map<string,LValue> TestLValue::jsonStringToMap(const string& jsonString)

{

rapidjson::Document doc;

doc.SetObject();

doc.Parse<rapidjson::kParseDefaultFlags>(jsonString.c_str());

map<string,LValue> m;

for(rapidjson::Value::MemberIterator iter = doc.MemberonBegin();iter != doc.MemberonEnd();iter++)

{

const char * key = iter->name.GetString();

const rapidjson::Value& val = iter->value;

if(val.IsDouble())

m.insert(make_pair(key, LValue(val.GetDouble())));

else if(val.IsBool())

m.insert(make_pair(key, LValue(val.GetBool())));

else if(val.IsInt())

m.insert(make_pair(key, LValue(val.GetInt())));

else if(val.IsInt64())

m.insert(make_pair(key, LValue(val.GetInt64())));

else if(val.IsString())

m.insert(make_pair(key, LValue(val.GetString())));

}

return m;

}

过程很简单,返回值的map<string,LValue>中的LValue的值需要判断其数据类型然后进行获取

if (it->second.getType()==LValue::Type::DOUBLE) {

  double value = it->second.asDouble();

else if (it->second.getType()==LValue::Type::INTEGER) {

  int value = it->second.asInt();

.

.

.

还有float、string、int64、bool、int64就不一一细写了

转载请注明出处,from 博客园 HemJohn

c++ json字符串转换成map管理的更多相关文章

  1. 使用fastjson的parseObject方法将json字符串转换成Map 或者List

    fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...

  2. json数组和json字符串转换成map解析

    package demo; import java.util.List;import java.util.Map;import java.util.Map.Entry; import net.sf.j ...

  3. parseObject方法将json字符串转换成Map

    String nwVal=recordDO.getWorkOrderNwVal(); HashMap<String,WxhcWorkOrderDO> nwMap=JSON.parseObj ...

  4. json格式转换成Map的应用

    jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...

  5. 使用jackson来进行数组格式的json字符串转换成List。

    有一个字符串如下.如下,也是通过jackson把list转换成的json字符串,我想把它转过来,看网上的内容都不尽人如意,都是片断的内容.估计只有写的知道怎么使用,所以就直接看了jackson的官网, ...

  6. 利用阿里巴巴封装的FastJSON来解析json并转换成map

    利用阿里巴巴封装的FastJSON来解析json并转换成map   package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...

  7. C#中服务端接受前端JSON字符串转换成字典集合

    我们是否可以把从前端接受的JSON字符串转换成字典集合呢? 比如从前端接收:{'size':'10', 'weight':'10kg'} 在服务端转换成:[{size:"10"}, ...

  8. json字符串转成 Map/List

    package jsonToMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import n ...

  9. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

随机推荐

  1. 洛谷P3080 [USACO13MAR]牛跑The Cow Run

    P3080 [USACO13MAR]牛跑The Cow Run 题目描述 Farmer John has forgotten to repair a hole in the fence on his ...

  2. Mac 下nginx 环境的配置

    这个是在度娘那里学来的. 因为是使用brew所以先安装: 安装命令如下:curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo ...

  3. 脑图和MarkDown

    使用脑图整理前端体系 根据以下网址整理 http://web.jobbole.com/84062/ http://naotu.baidu.com/ 学习MarkDown语法格式 (一) 标题 在首行插 ...

  4. Spring IOC 的源码分析

    刚学习Spring的时候,印象最深的就是 DispatcherServlet,所谓的中央调度器,我也尝试从这个万能胶这里找到入口 configureAndRefreshWebApplicationCo ...

  5. struts2.5+框架使用通配符与动态方法

    概述:struts2.5以后加强了安全性,下面就是安全配置引发的问题 通配符: 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="usercru ...

  6. LinkedList源码及原理

    简介 内部结构分析 LinkedList源码分析 构造方法 添加(add)方法 根据位置取数据的方法 根据对象得到索引的方法 检查链表是否包含某对象的方法: 删除(remove/pop)方法 Link ...

  7. SQL生成日期维度(到小时)

    #建表语句: CREATE TABLE [dbo].[Dim_日期3]( ) NOT NULL, [年] [int] NULL, ) NULL, ) NULL, ) NULL, ) NULL, ) N ...

  8. 阿里云服务器Centos7安装FastDFS(一)

    安装步骤一 安装FastDFS需要安装:gcc.libevent.libfastcommon.FastDFS(包括tracker和storage) 安装gcc 判断是否安装了gcc gcc -V 如果 ...

  9. QrenCode : linux命令行下生成二维码图片

    原文链接:http://wowubuntu.com/qrencode.html # 作者:riku/ / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接. 对于二维码大家应该并不陌 ...

  10. jdk动态代理和cglib动态代理的区别

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...