美文网首页
jsoncpp的简单使用

jsoncpp的简单使用

作者: jolanxiao | 来源:发表于2016-09-11 09:02 被阅读0次

    0、引用

    http://www.json.org/

    http://www.json.org.cn/

    1、Json简介

    Json是一种轻量级数据交换格式。它的基本结构包括 (pair)、值的有序列表(array)。pair 结构和array结构可以统称为对象(Object);pair object中的key必须是个字符串,pair object中的value可以是任意数据类型(pair object、array object、string、int 等等). array中的成员也可以是任意类型,但要array中所有value的数据类型一致。

    图1

    图2

    2、Jsoncpp简介

    c++使用jsoncpp封装和解析json数据。重要的数据结构 Json::Value root; Json::value 就是Objec数据类型。如果要当成pair object,则使用方式如下root["key"] = value; 如果当成array object,则使用方式如下,root.append(value); Object可以嵌套使用。例如 {“name”: {"sex": "man"}},可以用jsoncpp写成 root["name"]["sex"] = "man";实际上array的valu在内部也是有key的,这个key就是序列index。

    3、Jsoncpp表示Json对象

    {“name”:"jolan",

        “address”:{“province”:“beijing”,“area”:“haidian”},

        “Hoby”:["running","coding","football"]

    };

    上面的Json对象用Jsoncpp可以这样描述:

    Json::Value root;

    root["name"] = "jolan";

    root["addres"]["province"] = "beijing";

    root["addres"]["area"] = "haidian";

    root["Hoby"].append(“running”);

    root["Hoby"].append("coding");

    root["Hoby"].append("football");

    如果数组的value是个Object,则写填充好Object,再append。例如 {"people":[{"name":"jolan"},{"name":"linus"}]}

    Json::Value root;

    Json::Value element;

    element["name"] = "jolan";

    root.append(element);

    element["name"] = "linus";

    root.append(element);

    4、解析Jsoncpp对象

    Jsoncpp对象读取到最后,都只能用基本类型来解析。例如: 如何解析root["addres"]["province"];面对root["addres"]["province"]的时候,要告诉Jsoncpp如何看到这个值,如果,不指定的话就默认为都是Json::value 对象;因此正确的解析应该是 std::string strPro = root["addres"]["province"].asString(),类似的,还有asDouble()、asInt()、asUInt()等等。 如果读取到的某个对象是数组列表,则用下标取出这个数据对应的value。例如 root["Hoby"][0],root["Hoby"].size()指示了数组对象的大小。

    3、Jsonccpp序列化Json对象

    Json::FastWriter fw;

    Json::Value oRoot;

    std::string stdBody  = fw(oRoot)

    5、Jsoncpp反序列化Json字符串

    Json::Reader oReader;

    Json::Value  oData;

    if(!oReader.parse(strRspBody.c_str(), oData, false)) {

    return -50;

    }

    4、遍历Key字段

    Json::Value::Members oMember = oData.getMemberNames();

    Json::Value::Members::iterator iter;

    for(iter=oMember.begin();iter != oMember.end();++iter) {

    LOGSYS_WATER(_LC_DEBUG_,"key:%s",(*iter).c_str());

    }

    相关文章

      网友评论

          本文标题:jsoncpp的简单使用

          本文链接:https://www.haomeiwen.com/subject/osruettx.html