181 lines
4.3 KiB
C++
181 lines
4.3 KiB
C++
/*
|
||
This is a part of Tocy's Sample Code
|
||
demo to use JsonCpp
|
||
https://github.com/open-source-parsers/jsoncpp
|
||
*/
|
||
|
||
#include <iostream>
|
||
#include <string>
|
||
#include <fstream>
|
||
#include <cassert>
|
||
#include "json/json.h"
|
||
|
||
using namespace std;
|
||
|
||
// =========================== parse-json ==================================
|
||
void demo_simple()
|
||
{
|
||
ifstream ifs;
|
||
ifs.open("checkjson.json");
|
||
/*
|
||
In this file, its content is : (key-value)
|
||
{
|
||
"name" : "tocy",
|
||
"age" : 1000
|
||
}
|
||
*/
|
||
assert(ifs.is_open());
|
||
|
||
Json::Reader reader;
|
||
Json::Value root;
|
||
if (!reader.parse(ifs, root, false))
|
||
{
|
||
cerr << "parse failed \n";
|
||
return;
|
||
}
|
||
|
||
string name = root["name"].asString();
|
||
int age = root["age"].asInt();
|
||
|
||
cout << "demo read from filet result =============\n";
|
||
cout << "name : " << name << endl;
|
||
cout << "age : " << age << endl;
|
||
cout << endl;
|
||
|
||
ifs.close();
|
||
}
|
||
|
||
void demo_parse_mem_object()
|
||
{
|
||
const char json_data[] =
|
||
"{\"name\" : \"Tocy\", \"salary\" : 100, \"msg\" : \"work hard\", \
|
||
\"files\" : [\"1.ts\", \"2.txt\"]}";
|
||
|
||
Json::Reader reader;
|
||
Json::Value root;
|
||
// reader将Json字符串解析到root,root将包含Json里所有子元素
|
||
if (!reader.parse(json_data, json_data + sizeof(json_data), root))
|
||
{
|
||
cerr << "json parse failed\n";
|
||
return;
|
||
}
|
||
|
||
cout << "demo read from memory using object ---------\n";
|
||
string name = root["name"].asString();
|
||
int salary = root["salary"].asInt();
|
||
string msg = root["msg"].asString();
|
||
cout << "name: " << name << " salary: " << salary;
|
||
cout << " msg: " << msg << endl;
|
||
cout << "enter files: \n";
|
||
Json::Value files = root["files"]; // read array here
|
||
for (unsigned int i = 0; i < files.size(); ++i)
|
||
{
|
||
cout << files[i].asString() << " ";
|
||
}
|
||
cout << endl << endl;
|
||
}
|
||
|
||
void demo_parse_mem_array()
|
||
{
|
||
const char json_data[] =
|
||
"[{\"name\" : \"Tocy\", \"salary\" : 100}, {\"name\" : \"Kit\", \"salary\" : 89}, \
|
||
\"a json note\"]";
|
||
|
||
Json::Reader reader;
|
||
Json::Value root;
|
||
// reader将Json字符串解析到root,root将包含Json里所有子元素
|
||
if (!reader.parse(json_data, json_data + sizeof(json_data), root))
|
||
{
|
||
cerr << "json parse failed\n";
|
||
return;
|
||
}
|
||
|
||
cout << "demo read from memory using array---------\n";
|
||
unsigned int count = root.size() - 1;
|
||
for (unsigned int i = 0; i < count; ++i)
|
||
{
|
||
string name = root[i]["name"].asString();
|
||
int salary = root[i]["salary"].asInt();
|
||
cout << "name: " << name << " salary: " << salary << endl;
|
||
}
|
||
cout << "last msg: " << root[count].asString() << endl;
|
||
cout << endl << endl;
|
||
}
|
||
|
||
|
||
// =================== save-json =====================================
|
||
void demo_write_simple()
|
||
{
|
||
Json::Value root;
|
||
Json::FastWriter writer;
|
||
Json::Value person;
|
||
|
||
person["name"] = "tocy";
|
||
person["age"] = 1000;
|
||
root.append(person);
|
||
|
||
string json_file = writer.write(root);
|
||
cout << "demo write json ==============\n";
|
||
cout << json_file << endl;
|
||
}
|
||
|
||
void demo_write_object()
|
||
{
|
||
Json::Value root;
|
||
Json::FastWriter writer;
|
||
|
||
root["name"] = "tocy";
|
||
root["salary"] = 100;
|
||
root["msg"] = "work hard";
|
||
Json::Value files;
|
||
files[0] = "1.ts";
|
||
files[1] = "2.txt";
|
||
root["files"] = files;
|
||
|
||
string json_file = writer.write(root);
|
||
cout << "demo write json object ==============\n";
|
||
cout << json_file << endl;
|
||
}
|
||
|
||
void demo_write_array()
|
||
{
|
||
Json::Value root;
|
||
Json::FastWriter writer;
|
||
|
||
{
|
||
Json::Value person;
|
||
person["name"] = "Tocy";
|
||
person["salary"] = 100;
|
||
root[0] = person;
|
||
}
|
||
|
||
{
|
||
Json::Value person;
|
||
person["name"] = "Kit";
|
||
person["salary"] = 89;
|
||
root[1] = person;
|
||
}
|
||
|
||
root[2] = "a json note";
|
||
|
||
string json_file = writer.write(root);
|
||
cout << "demo write json ==============\n";
|
||
cout << json_file << endl;
|
||
}
|
||
|
||
int main(int argc, char * argv[])
|
||
{
|
||
// demo_simple();
|
||
// demo_parse_mem_object();
|
||
// demo_parse_mem_array();
|
||
|
||
printf("hello world\n");
|
||
|
||
cout << "\n\nnext are write json example\n================================\n" << std::flush;;
|
||
|
||
// demo_write_simple();
|
||
// demo_write_object();
|
||
// demo_write_array();
|
||
return 0;
|
||
}
|