cocos2dx读写json文件

本文介绍如何利用RapidJSON库进行JSON文件的读取、解析、修改及保存等操作。通过示例代码展示了如何获取JSON文件中的字符串、整数、数组及对象等数据类型,并演示了添加、修改及删除成员的方法。

首先包含下头文件

#include "json/rapidjson.h"

#include "json/document.h"//前两个解析

#include "json/writer.h"

#include "json/stringbuffer.h"//后两个做添加修改删除操作

using namespace rapidjson;


//data.json文件

{

    "username":"caoyang",

    "levels":10,

    "weapon":[1,2,3,4],

    "costume":{

        "clothing":"clothing",

        "headpiece":"headpiece",

        "shoes":"shoes"

    }

}


//具体代码

    //获得可写的具体文件路径

    std::string path = FileUtils::getInstance() -> getWritablePath();

    std::string jsonPath = path + filename;


    //读取

    rapidjson::Document doc;

    std::string jsonstr = FileUtils::getInstance()->getStringFromFile(jsonPath);

    log("%s",jsonstr.c_str());

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

    if(doc.HasParseError()){//出错

        return;

    }

    

    if(doc.HasMember("username")){

        rapidjson::Value &username = doc["username"];

        log("%s",username.GetString());

    }

    

    if(doc.HasMember("levels")){

        rapidjson::Value &levels = doc["levels"];

        log("%d",levels.GetInt());

    }

    

    if(doc.HasMember("weapon")){

        if (doc["weapon"].IsArray()) {

            rapidjson::Value &array = doc["weapon"];

            for (int i=0; i<array.Size(); i++){

                rapidjson::Value &element = array[i];

                log("%d",element.GetInt());

            }

        }

    }

    log("%d",doc["weapon"][1].GetInt());

    

    if(doc.HasMember("costume")){

        if(doc["costume"].IsObject()){

            rapidjson::Value &object= doc["costume"];

            rapidjson::Value &clothing = object["clothing"];

            log("%s",clothing.GetString());

        }

    }

    log("%s",doc["costume"]["clothing"].GetString());

    

    //添加

    doc["costume"].AddMember("name", "zhangsan", doc.GetAllocator());

    

    //修改

    doc["costume"]["clothing"].SetString("clothing1");

    

    //删除

    doc.RemoveMember("levels");

    

    //json字符串格式化写入可写路径

    rapidjson::StringBuffer buffer;//初始化缓冲区

    rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);//初始化写入器

    doc.Accept(writer);//写入doc

    FILE* file = fopen(jsonPath.c_str(), "w+");

    if(file)

    {

        fputs(buffer.GetString(), file);

        fclose(file);

    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值