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對象的方式操作即可。具體代碼不貼出來了,可以自己試着編寫一下。