C++解析JSON进行网络传输--jsoncpp的学习分析

1、jsoncpp的功能:

jsoncpp是一个使用C++解析json的开源库。


2、使用方法:

见http://blog.csdn.net/lizuqingblog/article/details/19839845


3、库的学习分析:

JsonCpp主要包含三种类型的class:Value Reader Writer。

jsoncpp中所有对象、类名都在namespace json中,包含json.h即可


Json::Value   :可以表示所有支持的类型,如:int , double ,string , object等

Json::Reader :将文件流或字符串创解析到Json::Value中,主要使用parse函数。

Json::Writer  :  与JsonReader相反,将Json::Value转换成字符串流等。

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


1)反序列化Json(解析Json)

{
    "name": "xiaoming″,
    "like": [
        {
            "book": "json"
        },
        {
            "food": "apple"
        },
        {
            "music": "sdds"
        }
    ]
}

void ReadJson() 
{
    std::string strValue = "{\"name\":\"xiaoming\",\"like\":[{\"book\":\"json\"},{\"food\":\"apple\"},{\"music\":\"sdds\"}]}";

    Json::Reader reader;
    Json::Value value;

    if (reader.parse(strValue, value))
    {   
        std::string out = value["name"].asString();
        std::cout << out << std::endl;
        const Json::Value arrayObj = value["like"];
        for (unsigned int i = 0; i < arrayObj.size(); i++)
        {   
            if (!arrayObj[i].isMember("book")) 
                continue;
            out = arrayObj[i]["book"].asString();
            std::cout << out;
            if (i != (arrayObj.size() - 1)) 
                std::cout << std::endl;
        }   
    }   
}


2)、序列化Json(生成Json):

void WriteJson() 
{
    Json::Value root;
    Json::Value arrayObj;
    Json::Value item;

    item["food"] = "apple";
    item["music"] = "JZhou";
    item["book"] = "json";
    arrayObj.append(item);

    root["name"] = "xiaoming";
    root["like"] = arrayObj;

    root.toStyledString();
    std::string out = root.toStyledString();
    std::cout << out << std::endl;
}


你可能感兴趣的:(Windows,C/C++)