jsoncpp详解

来源:互联网 发布:mac上软件删不掉 编辑:程序博客网 时间:2024/06/05 10:38

Jsoncpp使用

1 简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

2  json数据类型

2.1 对象(词典)

对象是一个无序的“‘名称/集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个名称后跟一个“:”(冒号);“‘名称/之间使用“,”(逗号)分隔。

2.2 数组(列表)

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

2.3 字符串(string

    字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。

2.4 数值(number)

Int 

unsigned int;

2.4 bool

truefalse

2.5

Null

值(value)可以是双引号括起来的字符串(string)、数值(number)truefalse、 null、对象(object)或者数组(array)。这些结构可以嵌套。

3 jsoncpp基本语法

使用JsonCpp前先来熟悉几个主要的类:  

Json::Value     可以表示里所有的类型,比如int,string,object,array等,具体应用将会在后边示例中介绍。 

Json::Reader   将json文件流或字符串解析到Json::Value, 主要函数有Parse。 

Json::Writer    与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。

 

3.1 Value

       Json::Value是jsoncpp中最基本,最重要的类,用于表示各种类型的对象,jsooncpp支持的对象类型可见Json::ValueType枚举值。例:

       Json::Value json_temp;

       Json_temp[“name”] = Json::Value(“mingqi”);

       Json[“key_array”].append(“array_string”);

3.2 Writer

         如上说了Json::Value的使用方式,现在到了该查看刚才赋值内容的时候了,查看json内容,使用Writer类即可。

       Jsoncpp的Json::Writer类是一个纯虚类,并不能直接使用。在此我们使用Json::Writer的子类:Json::FastWriter, Json::StyledWriter,Json::StyledStreamWriter。

    顾名思义。用Json::FastWriter来处理json应该是最快的。

Json::FastWriter fast_writer;

    cout<<"fastWriter:"<<fast_writer.write(root)<<endl;

    用Json::StyledWriter是格式化后的json,下面我们来看看Json::StyledWriter是怎样格式化的。  

    Json::StyledWriter styled_writer;

    cout<<"styleWriter:"<<styled_writer.write(root)<<endl;

3.3 Reader

Json::Reader是用于读取的,说的确切点,是用于将字符串转换为Json:Value对象的,下面我们来看个简单的例子:

stringstr=fast_writer.write(root);

        Json::Reader reader;

        Json::Value json_object;

 

        if (! reader.parse(str, json_object)) {

                cout<<"reader parsefailed"<<endl;

                return 1;

        }

 

       cout<<"json_object:"<<json_object["k_item5Object"]["name"]<<endl;

 

3.4 完整例子

      Json::Value json_item1;///对象

       json_item1["name"] = Json::Value("mingqi");//字符串

       json_item1["age"] = Json::Value(26);//整形

       json_item1["is_stu"] = Json::Value(true);//bool

 

       Json::Value root;//对象

       root["k_item1Str"] = Json::Value("item1");

       root["k_item2Int"] = Json::Value(123);

       root["k_item3bool"] = Json::Value(false);

       root["k_item4double"] = Json::Value(9.77);

       root["k_item5Object"] = json_item1;//嵌套对象

       root["k_item6Arr"].append("arr1");//数组

       root["k_item6Arr"].append(78.9);

       root["k_item6Arr"].append(true);

 

 

       Json::ValueType type = root.type();

       cout<<"root.type:"<<type<<endl;

 

//     Json::FastWriter fast_writer;

       //cout<<"FastWriter:"<<fast_writer.write(root)<<endl;

 

 

       Json::FastWriter fast_writer;

       cout<<"fastWriter:"<<fast_writer.write(root)<<endl;

 

       Json::StyledWriter styled_writer;

       cout<<"styleWriter:"<<styled_writer.write(root)<<endl;

 

       string str=fast_writer.write(root);

       Json::Reader reader;

       Json::Value json_object;

 

       if (! reader.parse(str, json_object)) {

                cout<<"reader parsefailed"<<endl;

                return 1;

       }

 

       cout<<"json_object:"<<json_object["k_item5Object"]["name"]<<endl;

       json_object["name"]="wmq";

 

 

       cout<<"fastWriter:"<<fast_writer.write(json_object)<<endl;

 

       //遍历

       Json::Value::Members mems=json_object.getMemberNames();

       for(Json::Value::Members::iterator it=mems.begin(); it != mems.end();it++) {

                string name = *it;

               cout<<"key:"<<name<<"\tvalue:"<<json_object[name]<<endl;

                if(json_object[name].isObject()) {

                        Json::Value::Membersmems=json_object[name].getMemberNames();

                        for(Json::Value::Members::iteratorit=mems.begin(); it != mems.end(); it++) {

                                string subName= *it;

                               cout<<"\t\tkey:"<<subName<<"\tvalue:"<<json_object[name][subName]<<endl;

                        }

               } else if(json_object[name].isArray()){

                        Json::Value   arrJson = json_object[name];

                        for (int i=0;i<json_object[name].size(); i++) {

                               cout<<"\t\t\tarr:"<<json_object[name][i]<<endl;

                        }

 

                }

       }

0 0
原创粉丝点击