首页 > 代码库 > jsoncpp封装和解析字符串、数字、布尔值和数组

jsoncpp封装和解析字符串、数字、布尔值和数组

使用jsoncpp进行字符串、数字、布尔值和数组的封装与解析。

1)下载jsoncpp的代码库 百度网盘地址 :http://pan.baidu.com/s/1ntqQhIT

2)解压缩文件 jsoncpp.rar

unzip jsoncpp.rar

3)修改jsoncpp/src/main.cpp文件

vim src/main.cpp
  1 #include <string>  2 #include <json/json.h>  3 #include "stdio.h"  4   5 int ReadJson(const std::string &);  6 std::string writeJson();  7   8 int main(int argc, char** argv)  9 { 10     using namespace std; 11  12     std::string strMsg; 13  14     cout<<"--------------------------------"<<endl; 15     strMsg = writeJson(); 16     cout<< "json write : " << endl << strMsg << endl; 17     cout<<"--------------------------------"<<endl; 18     cout<< "json read :" << endl; 19     ReadJson(strMsg); 20     cout<<"--------------------------------"<<endl; 21  22     return 0; 23 } 24  25 int ReadJson(const std::string & strValue)  26 { 27     using namespace std; 28  29     Json::Reader reader; 30     Json::Value value; 31  32     if (reader.parse(strValue, value)) 33     { 34         //解析json中的对象 35         string out = value["name"].asString(); 36         cout << "name : "   << out << endl; 37         cout << "number : " << value["number"].asInt() << endl; 38         cout << "value : "  << value["value"].asBool() << endl; 39         cout << "no such num : " << value["haha"].asInt() << endl; 40         cout << "no such str : " << value["hehe"].asString() << endl; 41  42         //解析数组对象 43         const Json::Value arrayNum = value["arrnum"]; 44         for (unsigned int i = 0; i < arrayNum.size(); i++) 45         { 46             cout << "arrnum[" << i << "] = " << arrayNum[i]; 47         } 48         //解析对象数组对象 49         Json::Value arrayObj = value["array"]; 50         cout << "array size = " << arrayObj.size() << endl; 51         for(unsigned int i = 0; i < arrayObj.size(); i++) 52         { 53             cout << arrayObj[i]; 54         } 55         //从对象数组中找到想要的对象 56         for(unsigned int i = 0; i < arrayObj.size(); i++) 57         { 58             if (arrayObj[i].isMember("string"))  59             { 60                 out = arrayObj[i]["string"].asString(); 61                 std::cout << "string : " << out << std::endl; 62             } 63         } 64     } 65  66     return 0; 67 } 68  69 std::string writeJson()  70 { 71     using namespace std; 72  73     Json::Value root; 74     Json::Value arrayObj; 75     Json::Value item; 76     Json::Value iNum; 77  78     item["string"]    = "this is a string"; 79     item["number"]    = 999; 80     item["aaaaaa"]    = "bbbbbb"; 81     arrayObj.append(item); 82  83     //直接对jsoncpp对象以数字索引作为下标进行赋值,则自动作为数组 84     iNum[1] = 1; 85     iNum[2] = 2; 86     iNum[3] = 3; 87     iNum[4] = 4; 88     iNum[5] = 5; 89     iNum[6] = 6; 90  91     //增加对象数组 92     root["array"]    = arrayObj; 93     //增加字符串 94     root["name"]    = "json"; 95     //增加数字 96     root["number"]    = 666; 97     //增加布尔变量 98     root["value"]    = true; 99     //增加数字数组100     root["arrnum"]    = iNum;101 102     root.toStyledString();103     string out = root.toStyledString();104 105     return out;106 }

4)在目录jsoncpp/ 下执行make命令

jsoncpp$ makemkdir -p objs/src/json;  mkdir -p objs/src;g++ -c -Wall -Werror -g -I include src/json/json_reader.cpp -o objs/src/json/json_reader.og++ -c -Wall -Werror -g -I include src/json/json_value.cpp -o objs/src/json/json_value.og++ -c -Wall -Werror -g -I include src/json/json_writer.cpp -o objs/src/json/json_writer.og++ -c -Wall -Werror -g -I include src/main.cpp -o objs/src/main.og++  objs/src/json/json_reader.o objs/src/json/json_value.o objs/src/json/json_writer.o objs/src/main.o -o main

5)运行jsoncpp/下的main文件

./main

6)运行结果如下

fengbo: jsoncpp$ ./main --------------------------------json write : {   "array" : [      {         "aaaaaa" : "bbbbbb",         "number" : 999,         "string" : "this is a string"      }   ],   "arrnum" : [ null, 1, 2, 3, 4, 5, 6 ],   "name" : "json",   "number" : 666,   "value" : true}--------------------------------json read :name : jsonnumber : 666value : 1no such num : 0no such str : arrnum[0] = nullarrnum[1] = 1arrnum[2] = 2arrnum[3] = 3arrnum[4] = 4arrnum[5] = 5arrnum[6] = 6array size = 1{    "aaaaaa" : "bbbbbb",    "number" : 999,    "string" : "this is a string"}string : this is a string--------------------------------

 

作者:风波

mail : fengbohello@qq.com

 

jsoncpp封装和解析字符串、数字、布尔值和数组