c++ json字符串转换成map管理
在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管理的更多相关文章
- 使用fastjson的parseObject方法将json字符串转换成Map 或者List
fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...
- json数组和json字符串转换成map解析
package demo; import java.util.List;import java.util.Map;import java.util.Map.Entry; import net.sf.j ...
- parseObject方法将json字符串转换成Map
String nwVal=recordDO.getWorkOrderNwVal(); HashMap<String,WxhcWorkOrderDO> nwMap=JSON.parseObj ...
- json格式转换成Map的应用
jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...
- 使用jackson来进行数组格式的json字符串转换成List。
有一个字符串如下.如下,也是通过jackson把list转换成的json字符串,我想把它转过来,看网上的内容都不尽人如意,都是片断的内容.估计只有写的知道怎么使用,所以就直接看了jackson的官网, ...
- 利用阿里巴巴封装的FastJSON来解析json并转换成map
利用阿里巴巴封装的FastJSON来解析json并转换成map package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...
- C#中服务端接受前端JSON字符串转换成字典集合
我们是否可以把从前端接受的JSON字符串转换成字典集合呢? 比如从前端接收:{'size':'10', 'weight':'10kg'} 在服务端转换成:[{size:"10"}, ...
- json字符串转成 Map/List
package jsonToMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import n ...
- json 字符串转换成对象,对象转换成json字符串
json 字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法: [注意jquery版本问题] var str = '{"name":&qu ...
随机推荐
- lca最近公共祖先(st表/倍增)
大体思路 1.求出每个元素在树中的深度 2.用st表预处理的方法处理出f[i][j],f[i][j]表示元素i上方第2^j行对应的祖先是谁 3.将较深的点向上挪,直到两结点的深度相同 4.深度相同后, ...
- Tyvj P1520 树的直径
P1520 树的直径 http://www.tyvj.cn/p/1520 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 树的直径,即这棵树中距离最远的两个结 ...
- To the max(求最大子矩阵和)
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47985 Accepted: 25387 Desc ...
- 剑指Offer的学习笔记(C#篇)-- 树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 一 . 二叉树的概念 树形结构是一种典型的非线性结构,除了用于表示相邻关系外,还可 ...
- [Swift]LeetCode1081. 不同字符的最小子序列 | Smallest Subsequence of Distinct Characters
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 集合中的 for-Each循环
数组的加强型的for-Each循环很简单,我们再来看一下集合中的for-Each 循环又是怎么样的.我们都知道集合中的遍历都是通过迭代(iterator)完成的.也许有人说,也可以按照下面的方式来遍 ...
- Educational Codeforces Round 66 (Rated for Div. 2) B. Catch Overflow!
链接:https://codeforces.com/contest/1175/problem/B 题意: You are given a function ff written in some bas ...
- C#使用GZipStream实现压缩和解压缩
前言 我们在项目中,有可能会遇到存入到数据库或者传输的数据量比较大,这个时候,就可以考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据. 正文 废话不多说,我封装了一个 ...
- 实例练习——轮播图 & 全选/全不选
1 实例1:轮播图 1)实质就是改变图片的src 2)把图片的路径用数组存起来 3) “下一张”的实现就是改变数组的下标,用一个变量i控制,每次点击下标加1.“上一张”的实现正好相反.注意“i的变化” ...
- jsp使用中$的符号使用失效
解决方法 添加一段话 <%@ page isELIgnored="false"%> 原因:因为jsp servlet版本问题,2.3及2.3之前的版本isELIgno ...