• 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$ make
    mkdir -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.o
    g++ -c -Wall -Werror -g -I include src/json/json_value.cpp -o objs/src/json/json_value.o
    g++ -c -Wall -Werror -g -I include src/json/json_writer.cpp -o objs/src/json/json_writer.o
    g++ -c -Wall -Werror -g -I include src/main.cpp -o objs/src/main.o
    g++  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 : json
    number : 666
    value : 1
    no such num : 0
    no such str : 
    arrnum[0] = null
    arrnum[1] = 1
    arrnum[2] = 2
    arrnum[3] = 3
    arrnum[4] = 4
    arrnum[5] = 5
    arrnum[6] = 6
    array size = 1
    
    {
        "aaaaaa" : "bbbbbb",
        "number" : 999,
        "string" : "this is a string"
    }
    string : this is a string
    --------------------------------

    作者:风波

    mail : fengbohello@qq.com

  • 相关阅读:
    基于Maven的MyBatis Generator逆向工程
    JQuery对象调用reset方法:Uncaught TypeError: $(...).reset is not a function
    死锁编码及定位分析
    线程池的简介及底层原理
    转载:Mysql8.0忘记 root 密码, 如何修改?
    synchronized 和 Lock 有什么区别?
    java 中的阻塞队列及生产者-消费者中的简单应用
    java 中 CountDownLatch、CyclicBarrier 和 Semaphore 的简单使用
    java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁
    Java 集合类的线程安全问题及解决方法
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4066254.html
Copyright © 2020-2023  润新知