JsonCpp Json对象写入

JsonCpp Json对象写入

概述

​ 有了上两篇的介绍,对于Json格式数据的解析在大多数场景下已经够用,不过Json数据的应用可不止于读取,还有大量的情况需要用到Json对象的写入,下面就来说一下Json对象的写入。

简单Json对象写入

​ 前面说到,对于简单的Json对象操作,Json::Value对象行为与std::map对象类似,可以使用”[]”通过Key值获取相应的Value值,同样,在写入时,行为也是类似的。若Json::Value对象中没有该Key,则会创建一个相应的Key,并赋予等号右边的值作为Value值。操作方法可以通过一段简单的代码来理解:

//
//  main.cpp
//  TestJson
//
//  Created by Morris on 2016/11/21.
//  Copyright © 2016年 Morris. All rights reserved.
//

#include <iostream> 
#include <fstream>
#include <string>
#include <json/json.h>

int main(int argc, const char * argv[])
{
    std::ifstream ifs;
    ifs.open("/Users/Morris/Code/cpp/test/test.json");
    Json::Value val;
    Json::Value arr;
    Json::Reader reader;

    val["Name"] = Json::Value("Morris");
    val["Age"] = Json::Value(22);

    //解析为Json风格的字符串
    Json::StyledWriter sw;
    std::
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Jsoncpp进行分块读取和写入超大的JSON对象可以采用以下步骤: 1. 打开JSON文件,并创建Json::Value对象存储JSON数据。 ```c++ Json::Value jsonValue; std::ifstream ifs("large.json"); ifs >> jsonValue; ``` 2. 根据需要将JSON数据分割成多个块,每个块存储在一个Json::Value对象中。 ```c++ std::vector<Json::Value> jsonBlocks; int blockSize = 10000; // 块大小 int totalSize = jsonValue.size(); // JSON对象总大小 for (int i = 0; i < totalSize; i += blockSize) { int remainSize = totalSize - i; int curSize = remainSize < blockSize ? remainSize : blockSize; Json::Value curBlock(Json::arrayValue); for (int j = i; j < i + curSize; ++j) { curBlock.append(jsonValue[j]); } jsonBlocks.push_back(curBlock); } ``` 3. 将分块后的JSON数据写入文件中。 ```c++ std::ofstream ofs("large_blocks.json"); for (const auto& block : jsonBlocks) { ofs << block.toStyledString() << std::endl; } ``` 4. 读取分块后的JSON数据。 ```c++ std::vector<Json::Value> jsonBlocks; std::ifstream ifs("large_blocks.json"); std::string line; while (std::getline(ifs, line)) { Json::Value block; std::stringstream ss(line); ss >> block; jsonBlocks.push_back(block); } ``` 5. 将分块后的JSON数据合并为一个Json::Value对象。 ```c++ Json::Value jsonValue(Json::arrayValue); for (const auto& block : jsonBlocks) { for (const auto& item : block) { jsonValue.append(item); } } ``` 需要注意的是,分块读写JSON数据需要根据实际情况选择合适的块大小,不能过大或过小。同时,分块读写JSON数据会增加一定的处理复杂度,需要谨慎处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值