加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

JsonCpp Json对象写入

发布时间:2020-12-16 18:51:04 所属栏目:百科 来源:网络整理
导读:JsonCpp Json对象写入 概述 ? 有了上两篇的介绍,对于Json格式数据的解析在大多数场景下已经够用,不过Json数据的应用可不止于读取,还有大量的情况需要用到Json对象的写入,下面就来说一下Json对象的写入。 简单Json对象写入 ? 前面说到,对于简单的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::string res_str = sw.write(val);
    std::cout << res_str << std::endl;

    return 0;
}

Json数组对象写入

? Json数组对象也可以参照上面提到的简单Json对象的写入,可以构造单纯的Json数组对象,即不属于任何Json对象的属性,操作方法是直接调用Json::Value的成员方法append,append可以直接向一个空的Json::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);
    for (int i = 0; i < 3; ++i) {
        arr.append(Json::Value(val));
    }

    //解析为Json风格的字符串
    Json::StyledWriter sw;
    std::string res_str = sw.write(arr);
    std::cout << res_str << std::endl;

    return 0;
}

Res:

[

{

“Age” : 22,

“Name” : “Morris”

},

{

“Age” : 22,

“Name” : “Morris”

}

]

? 也可以构造属于某一Json对象的属性的Json数组对象,两者操作上的差别也仅在append调用时,仔细看示例代码即可,具体代码与相应结果如下:

//
// 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);
    for (int i = 0; i < 3; ++i) {
        arr["Person"].append(Json::Value(val));
    }

    //解析为Json风格的字符串
    Json::StyledWriter sw;
    std::string res_str = sw.write(arr);
    std::cout << res_str << std::endl;

    return 0;
}

Res:

{

“Person” : [

{

“Age” : 22,

“Name” : “Morris”

},

{

“Age” : 22,

“Name” : “Morris”

}

]

}

? 在append调用时,val首先先调用了Json::Value的”[]”操作符重载,由上述所说,若val没有这个Key,则会创建一个,之后再调用append,则将数组元素添加到了相应的Key下的数组中。

构造Json格式的空数组

? 有时也会需要构造一个符合Json格式的空数组,这时候如果继续用append,则结果将与我们所需要的不一致,它会出现这样的情况: [ null ]。对于这个问题的解决,可以使用Json::Value的resize方法,使用resize(0)则可以构造一个符合我们需求的Json空数组,具体操作与结果如下:

//
// 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;

    arr["Person"].resize(0);

    //解析为Json风格的字符串
    Json::StyledWriter sw;
    std::string res_str = sw.write(arr);
    std::cout << res_str << std::endl;

    return 0;
}

Res:

{

“Person” : []

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读