หลังจากทดลองใช่ ๋json_spirit (จากบทความ JSON Spirit) มาซักพัก ผลคือใช้งานได้ดีทีเดียว แต่ตัว ่json_spirit เองก็ยังใช้งานซับซ้อนอยู่มากกว่าจะเข้าถึงข้อมูลได้ในแต่ละลำดับ ส่วน ๋JSONCPP นั้นมีการโอเวอร์โหลดโอเปอร์เรเตอร์ไว้หลายตัว ทำให้ใช้งานได้ง่ายขึ้น ทดลองเอา ตัวอย่างเดิมมาเขียนใหม่
$ ./a.out
The JSON string: {"a man":{"name":"a man","age":25},"a boy":{"name":"a boy", "age":15}}
Read JSON string: 1
Key: a boy
ขึ้น Property:
-> "age": 15
-> "name": a boy
Key: a man
Property:
-> "age": 25
-> "name": a man
ได้ผลเหมือนกันอีกทั้งยังใช้งาน iteration ได้อีกด้วย นอกจากนี้ยังมีฟังก์ชันและโอเปอร์เรชันหลายตัวทำให้ใช้งานง่ายขึ้น
#include <iostream>ทดลองคอมไพล์แลัะรัน
#include <string>
using namespace std;
#include <jsoncpp/json/reader.h>
int main(){
std::string json_str = "{\"a man\":{\"name\":\"a man\",\"age\":25},\"a boy\":{\"name\":\"a boy\", \"age\":15}}";
cout << "The JSON string: " << json_str << endl;
Json::Value root;
Json::Reader reader;
cout<<"Read JSON string: "<<reader.parse(json_str, root)<<endl;
for(Json::ValueIterator i = root.begin(); i != root.end(); i++){
auto key = i.key().asString();
cout << "Key: " << key << endl;
cout << "Property: " << endl;
for(Json::ValueIterator j = (*i).begin(); j != (*i).end(); j++){
auto key = j.key().asString();
if (key == "name")
cout << "-> \"" << key << "\": " << (*j).asString() << endl;
else if (key == "age")
cout << "-> \"" << key << "\": " << (*j).asInt() << endl;
}
}
return 0;
}
$ ./a.out
The JSON string: {"a man":{"name":"a man","age":25},"a boy":{"name":"a boy", "age":15}}
Read JSON string: 1
Key: a boy
ขึ้น Property:
-> "age": 15
-> "name": a boy
Key: a man
Property:
-> "age": 25
-> "name": a man
ได้ผลเหมือนกันอีกทั้งยังใช้งาน iteration ได้อีกด้วย นอกจากนี้ยังมีฟังก์ชันและโอเปอร์เรชันหลายตัวทำให้ใช้งานง่ายขึ้น
ความคิดเห็น
แสดงความคิดเห็น