JsonCpp操作数组对象
概述
Json格式数据中,除了简单的String类型和一些非String类型,也有像各种高级语言中的数组类型一般的数组对象,且Json数组在实际开发中使用频率也比较高,这里就记录一些对于Json数组的常规操作。
JsonCpp操作简单数组对象
Json数组对象以”[]”进行包裹,方括号内的元素即是数组的元素。数组的元素可以是一些基本的Json类型,也可以是一些复杂的Json对象,刚开始就说一下对于元素为基本Json类型的数组如何操作,这里先给出一个简单的Json数组例子:
[ 1, 2, 3, 4 ]
- 1
上述例子则表示了一个结构简单的Json数组,取其中元素的操作如各高级语言一般,可以使用”[]” + Index的方式,回顾上一篇JsonCpp的介绍,要取出Json数据中的某个元素的值,则应该将代表该数据的对象先获取得到,使用”[]” + Index即是获取了代表该数据的对象,之后再根据Json数据中的数据类型去执行Json::Value的成员方法asType(Type指代某种Json类型)。下面给出操作上述例子的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::Reader reader; if (!reader.parse(ifs, val)) { return -1; } int sz = val.size(); for (int i = 0; i < sz; ++i) { std::cout << "Element " << i + 1 << ": "; std::cout << val[i].asInt(); std::cout << std::endl; } return 0; }
JsonCpp操作复杂Json数组
对于Json数组,还有另外的一些复杂的情况,如Json数组是某一Json对象的一部分,或者Json数组中元素是复杂的Json对象。这两种情况在Json的实际运用中出现的次数还比较频繁,先说第一种,Json数组是某一Json对象的一部分,先给出一个具体的例子:
{ "Name": "Morris", "Skills": [ "Basketball", "Sing", "Play Games", "Program" ] }
- 1
- 2
- 3
- 4
名为Skills的Json数组为Json对象的一个属性,获取Skills中具体数据的方法,则是先获取该Json数组对象,如获取Json对象的属性一般使用key值即可从Json对象中获取到相应的属性,之后再使用上面提到的Json数组操作方式即可进行对于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::Reader reader; if (!reader.parse(ifs, val)) { return -1; } int sz = val["Skills"].size(); for (int i = 0; i < sz; ++i) { std::cout << "Element " << i + 1 << ": "; std::cout << val["Skills"][i].asString(); std::cout << std::endl; } return 0; }
对于Json数组的另一种比较复杂的情况,Json数组元素是对象,看过上面的叙述,应该也比较容易想到操作方式了。即先获取Json数组对象,之后再以Index方式获取到数组中单个元素,再对单个元素以操作Json对象的方式操作即可。具体代码不贴出来了,可以自己试着编写一下。