在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. [Xcode 实际操作]六、媒体与动画-(3)使用CoreImage框架设置图片的单色效果

    目录:[Swift]Xcode实际操作 本文将演示如何使用图片框架,将图片转换成单色样式. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...

  2. Solidity 最新 0.5.8 中文文档发布

    本文首发于深入浅出区块链社区 热烈祝贺 Solidity 最新 0.5.8 中文文档发布, 这不单是一份 Solidity 速查手册,更是一份深入以太坊智能合约开发宝典. 翻译说明 Solidity ...

  3. CODING 告诉你硅谷的研发项目管理之道(5)

    CODING 已经通过前四期文章,让大家逐步了解了一些硅谷优秀的项目管理者是如何工作.如何维持团队高效运作的.在过去的十几年中,中国的互联网行业发展过于迅猛,导致很多管理人员都是赶鸭子上架,商场如战场 ...

  4. 你必须学写 Python 装饰器的五个理由

    你必须学写Python装饰器的五个理由 ----装饰器能对你所写的代码产生极大的正面作用 作者:Aaron Maxwell,2016年5月5日 Python装饰器是很容易使用的.任何一个会写Pytho ...

  5. Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

    前言 在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延.Spring ...

  6. C 语言实例 - 循环输出26个字母

    C 语言实例 - 循环输出26个字母 循环输出 个字母. 实例 #include <stdio.h> int main() { char c; for(c = 'A'; c <= ' ...

  7. 黑马旅游网 ajax+html在前端实现页标签个数控制

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. JS高级学习历程-12

    冒充继承 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/T ...

  9. Python随笔---深浅拷贝

    Python中为了避免某些方法的副作用(拷贝后有时更改原有数据),故存在有深浅拷贝的存在 浅拷贝导入copy方法集,使用copy_copy的方法进行 深拷贝一样导入copy方法集,使用copy_dee ...

  10. Ocelot实现API网关服务

    NET Core微服务之基于Ocelot实现API网关服务 https://www.cnblogs.com/edisonchou/p/api_gateway_ocelot_foundation_01. ...