zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Gitlab的安装汉化及问题解决
    Python-Day15 JavaScript/DOM
    Python-Day12 Python mysql and ORM
    Python-Day11 RabbitMQ/redis
    Python-Day9 Paramiko模块/进程/线程/RabbitMQ队列
    Python-Day7 面向对象进阶/异常处理/Socket
    使用CryptoJS解决微信小程序用户信息解密
    How to: Configure an Azure SQL Database firewall using the Azure Portal
    iOS 开发: 自定义相册, 保存多张图片到自定义相册中
    解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册 ( iOS 8 Photos framework: Create a albums with iOS8 )
  • 原文地址:https://www.cnblogs.com/HemJohn/p/4946434.html
Copyright © 2011-2022 走看看