初次使用json使用随记

json格式的解析不需要自己进行编码实现,已经有好多稳定的开源库可供使用;c++可以使用jsoncpp,c可以使用cjson

 

JsonCpp是一个开源库

下载地址:https://github.com/open-source-parsers/jsoncpp

文档地址:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html

 

json数据格式有{} []  :  " , 几种符号组成,如下:

键值对  “key”:value  (说明:value可是数值 --》 “age”:18,也可以是字符串“string”--》“name”:“lilei”);

对象:一对{}即为一个对象,{}内可以是键值对的集合,也可以是数组[ ]

数组:一对[ ]既是一个数组,其概念类似于C语言中的数组,数组内可以是对象,也可以是键值对

下面是一个简单的例子,涵盖键值对,数组,对象

{

  "task":"persional-message-deal",

  "persional-msg":{

      "head-teacher":{

          "name":"hangmeimei",

          "sex":"female",

          "age":28,

          "hight":49.8

      },

      "students-msgs":[

           {

            "name":"xiaoming",

            "sex":"male",

            "age":12,

            "math-scores":90,

            "english-scores":110

          }, {

            "name":"xiaohong",

            "sex":"female",

            "age":12,

            "math-scores":90,

            "english-scores":110

          }

        ]

  }

 

}

解析:

  jsoncpp中两类 Value(json数据的存储,数据序列化和反序列化的方法),Reader(在字符串中对json数据的读取)

  重点:在处理json数据是以下两个对象是必须要创建的

       Json::Reader reader; 
       Json::Value root;

  处理流程:

  reader.parse(task_data->data, root)

  if(root.isobject){

                  std::string taskJsonString = root.toStyledString(); // 将json消息内容全部转换为字符串的格式(非必要操作)

      // 从json数据中获取需要的值

 

      Json::Value msg= root["persional-msg"];

      std::string teacher_name = msg["head_teacher"]["name"].asString(); // 获取字符串

      uint16 teach_age =  msg["head_teacher"]["age"].asUint(); // 获取整型据

      float teach_hight = msg["head_teacher"]["hight"].asDouble();// 获取浮点数据

        ........

  }

  提高程序健壮性常用到的接口:

  root["key_value"].isNull()----->判断是否有key_value键值:如果没有返回true

  root["RouteData"].isObject()----->判断是否是RouteData对应的是否是一个对象:如果是返回true

  root["RouteArrayData"].size() ---->读取RouteData数组的大小

 

posted on 2019-11-12 15:23  高山上的星星  阅读(277)  评论(0编辑  收藏  举报