在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. IT兄弟连 Java语法教程 Java语言入门 典面试题

    1.请说明JVM.JRE和JDK是什么?它们有什么关系? JVM是Java虚拟机,Java Virtual Machine的缩写,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实 ...

  2. python中的三元表达式(三目运算符)

    python中没有其他语言中的三元表达式,不过有类似的实现方法 其他语言中,例如java的三元表达式是这样 int a = 1; String b = ""; b = a > ...

  3. Python学习笔记(数据处理)

    处理文件中数据 (统计分数) 看一下我们的文档里的数据: #-- scores.txt 刘备 23 35 44 47 51 关羽 60 77 68 张飞 97 99 89 91 诸葛亮 100 1.先 ...

  4. vue 开发笔记

    vue 开发记录 marked 插件的使用 import marked from "marked"; import hljs from "highlight.js&quo ...

  5. CentOS 7 部署 nginx-1.14.2

    参考:http://www.linuxe.cn/post-168.html 链接:https://pan.baidu.com/s/1NzHIY7mYgHJ6yMF_rdd0ZQ 提取码:n8o9 下载 ...

  6. Python内建函数二

    内置函数二: 1.lambda (匿名函数) 为了解决一些简答的需求而设计的一句话函数.不需要def来声明. def func(n): return n*n f = lambda n: n*n 注意: ...

  7. CoreCLR源码2

    CoreCLR源码 前一篇我们看到了CoreCLR中对Object的定义,这一篇我们将会看CoreCLR中对new的定义和处理new对于.Net程序员们来说同样是耳熟能详的关键词,我们每天都会用到ne ...

  8. 传纸条(scrip)

    传纸条(scrip) 题目背景 Awson是某国际学校信竞组的一只菜鸡.每次竞赛考试都只能垫底.终于有一天,他决定不再苟活,发挥他的人脉优势,准备在一次竞赛考试时传纸条作弊. 题目描述 他预先知道了考 ...

  9. SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)

    当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异. 笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来介绍一下项目中遇到的问题以及我的解决方 ...

  10. Spring Boot自动配置原理与实践(一)

    前言 Spring Boot众所周知是为了简化Spring的配置,省去XML的复杂化配置(虽然Spring官方推荐也使用Java配置)采用Java+Annotation方式配置.如下几个问题是我刚开始 ...