JsonCpp Json对象写入

前端之家收集整理的这篇文章主要介绍了JsonCpp Json对象写入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

JsonCpp Json对象写入

概述

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

简单Json对象写入

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

  1. //
  2. // main.cpp
  3. // TestJson
  4. //
  5. // Created by Morris on 2016/11/21.
  6. // Copyright © 2016年 Morris. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <json/json.h>
  13.  
  14. int main(int argc,const char * argv[])
  15. {
  16. std::ifstream ifs;
  17. ifs.open("/Users/Morris/Code/cpp/test/test.json");
  18. Json::Value val;
  19. Json::Value arr;
  20. Json::Reader reader;
  21.  
  22. val["Name"] = Json::Value("Morris");
  23. val["Age"] = Json::Value(22);
  24.  
  25. //解析为Json风格的字符串
  26. Json::StyledWriter sw;
  27. std::string res_str = sw.write(val);
  28. std::cout << res_str << std::endl;
  29.  
  30. return 0;
  31. }

Json数组对象写入

​ Json数组对象也可以参照上面提到的简单Json对象的写入,可以构造单纯的Json数组对象,即不属于任何Json对象的属性,操作方法是直接调用Json::Value的成员方法append,append可以直接向一个空的Json::Value对象中附加数组元素,具体操作与结果如下:

  1. //
  2. // main.cpp
  3. // TestJson
  4. //
  5. // Created by Morris on 2016/11/21.
  6. // Copyright © 2016年 Morris. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <json/json.h>
  13.  
  14. int main(int argc,const char * argv[])
  15. {
  16. std::ifstream ifs;
  17. ifs.open("/Users/Morris/Code/cpp/test/test.json");
  18. Json::Value val;
  19. Json::Value arr;
  20. Json::Reader reader;
  21.  
  22. val["Name"] = Json::Value("Morris");
  23. val["Age"] = Json::Value(22);
  24. for (int i = 0; i < 3; ++i) {
  25. arr.append(Json::Value(val));
  26. }
  27.  
  28. //解析为Json风格的字符串
  29. Json::StyledWriter sw;
  30. std::string res_str = sw.write(arr);
  31. std::cout << res_str << std::endl;
  32.  
  33. return 0;
  34. }

Res:

[

{

“Age” : 22,

“Name” : “Morris”

},

{

“Age” : 22,

“Name” : “Morris”

}

]

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

  1. //
  2. // main.cpp
  3. // TestJson
  4. //
  5. // Created by Morris on 2016/11/21.
  6. // Copyright © 2016年 Morris. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <json/json.h>
  13.  
  14. int main(int argc,const char * argv[])
  15. {
  16. std::ifstream ifs;
  17. ifs.open("/Users/Morris/Code/cpp/test/test.json");
  18. Json::Value val;
  19. Json::Value arr;
  20. Json::Reader reader;
  21.  
  22. val["Name"] = Json::Value("Morris");
  23. val["Age"] = Json::Value(22);
  24. for (int i = 0; i < 3; ++i) {
  25. arr["Person"].append(Json::Value(val));
  26. }
  27.  
  28. //解析为Json风格的字符串
  29. Json::StyledWriter sw;
  30. std::string res_str = sw.write(arr);
  31. std::cout << res_str << std::endl;
  32.  
  33. return 0;
  34. }

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空数组,具体操作与结果如下:

  1. //
  2. // main.cpp
  3. // TestJson
  4. //
  5. // Created by Morris on 2016/11/21.
  6. // Copyright © 2016年 Morris. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <json/json.h>
  13.  
  14. int main(int argc,const char * argv[])
  15. {
  16. std::ifstream ifs;
  17. ifs.open("/Users/Morris/Code/cpp/test/test.json");
  18. Json::Value val;
  19. Json::Value arr;
  20. Json::Reader reader;
  21.  
  22. arr["Person"].resize(0);
  23.  
  24. //解析为Json风格的字符串
  25. Json::StyledWriter sw;
  26. std::string res_str = sw.write(arr);
  27. std::cout << res_str << std::endl;
  28.  
  29. return 0;
  30. }

Res:

{

“Person” : []

}

猜你在找的Json相关文章