`

C++ JsonCpp 使用(转)

 
阅读更多

前言

JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择
JSON的全称为:JavaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的,详情参考http://www.json.org/。
本文选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。

JsonCpp简介

JsonCpp主要包含三种类型的class:Value Reader Writer。
jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。
注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。

下载和编译

本文运行环境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0

下载地址是:http://sourceforge.net/projects/jsoncpp/

解压之后得到jsoncpp-src-0.5.0文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-0.5.0\include\json,jsoncpp的cpp文件位于jsoncpp-src-0.5.0\src\lib_json。

这里我列出我们的工作目录:

复制代码
jsoncpp/           //工作目录
|-- include        //头文件根目录
|  |-- json       //json头文件,对应jsoncpp-src-0.5.0\include\json
|-- src            //cpp源码文件根目录
  |-- json       //jsoncpp源码文件,对应jsoncpp-src-0.5.0\src\lib_json
  |-- main.cpp   //我们的主函数,调用jsoncpp的示例代码  

|-- makefile       //makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践
复制代码

 

反序列化Json对象

假设有一个json对象如下:

复制代码
{
    "name": "json″,
    "array": [
        {
            "cpp": "jsoncpp"
        },
        {
            "java": "jsoninjava"
        },
        {
            "php": "support"
        }
    ]
}
复制代码

我们要实现这个json的反序列号代码如下:

复制代码
void readJson() {
    using namespace std;
    std::string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";

    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["array"];
        for (unsigned int i = 0; i < arrayObj.size(); i++)
        {   
            if (!arrayObj[i].isMember("cpp")) 
                continue;
            out = arrayObj[i]["cpp"].asString();
            std::cout << out;
            if (i != (arrayObj.size() - 1)) 
                std::cout << std::endl;
        }   
    }   
}
复制代码

 

序列化Json对象

复制代码
void writeJson() {
    using namespace std;

    Json::Value root;
    Json::Value arrayObj;
    Json::Value item;

    item["cpp"] = "jsoncpp";
    item["java"] = "jsoninjava";
    item["php"] = "support";
    arrayObj.append(item);

    root["name"] = "json";
    root["array"] = arrayObj;

    root.toStyledString();
    std::string out = root.toStyledString();
    std::cout << out << std::endl;
}
复制代码
分享到:
评论

相关推荐

    c++ jsoncpp最新源代码

    c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp最新源代码c++ jsoncpp...

    jsoncpp-0_c++jsoncpp_jsoncpp_jsoncpp-0.10.7_jsoncpp.lib_源码.zip

    该压缩包“jsoncpp-0_c++jsoncpp_jsoncpp_jsoncpp-0.10.7_jsoncpp.lib_源码.zip”包含的是jsoncpp库的0.10.7版本的源代码和可能的库文件(jsoncpp.lib)。这个库文件是预编译的二进制形式,供开发者在他们的项目中...

    c++ jsoncpp所有类及类方法的全面解析(代码示例)

    JSONCPP 是一个 C++ 库,用于处理 JSON(JavaScript Object Notation)数据格式。这个库提供了多种类,便于在 C++ 程序中进行 JSON 数据的序列化和反序列化。下面是对 JSONCPP 中主要类及其方法的详细解析: 1. **...

    c++ jsoncpp demo

    这个"**c++ jsoncpp demo**"项目是针对C++编程者的一个示例,它演示了如何使用Jsoncpp库来解析、生成和操作JSON数据。 Jsoncpp是一个开源库,它为C++提供了读写JSON数据的接口。这个项目旨在帮助开发者了解如何在...

    linux c/c++ jsoncpp 头文件以及动态度 (也移植了arm)

    在 C/C++ 项目中使用 JSONCPP,开发者需要包含相应的头文件,链接 JSONCPP 动态库,并按照 API 文档编写代码来读写 JSON 数据。JSONCPP 提供了诸如 `Json::Value` 类来表示 JSON 值,`Json::Reader` 和 `Json::...

    史上最详尽的JsonCpp使用指南(含c++封装的源代码)

    JsonCpp 是一个功能强大且易于使用的 C++ 库,适用于处理 JSON 数据。通过详细的指南,开发者可以轻松掌握如何构建和解析 JSON 数据,并将其集成到自己的应用中。无论是在桌面应用还是网络服务开发中,JsonCpp 都能...

    jsoncpp 写入乱码解决版本

    JSONCPP 是一个开源库,专为C++设计,用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,被广泛应用于Web服务和应用程序之间的数据传输。在JSONCPP中,可能会遇到写入文件时...

    JsonCpp(C++下的JsonObject)

    在Android里有习惯了使用JsonObject进行网络数据传输,但是在C++下进行网络传输却没有现成的JsonObject库。JsonCpp是C++下的开源库,直接把cpp源代码和头文件提取出来就能使用。

    C++处理json:jsoncpp

    了解并掌握这些知识点后,你将能够有效地在C++项目中使用`jsoncpp`库来处理JSON数据。无论是读取配置文件、与服务器进行数据交换还是存储用户数据,`jsoncpp`都能提供强大的支持。记住,正确处理错误和异常是确保...

    JsonCpp解析\u中文乱码_修改源码_完美解决

    JsonCpp是一个开源库,它为C++提供了处理JSON的工具,支持读写JSON文档以及与C++对象之间的转换。然而,在处理包含中文字符的JSON数据时,JsonCpp可能会遇到乱码问题,这是由于编码不兼容或者处理方式不当导致的。 ...

    jsoncpp-0_c++jsoncpp_jsoncpp_jsoncpp-0.10.7_jsoncpp.lib_源码.rar

    这个压缩包的名字"jsoncpp-0_c++jsoncpp_jsoncpp_jsoncpp-0.10.7_jsoncpp.lib_源码.rar"表明它是一个关于JSONCPP的C++实现,其中的"jsoncpp.lib"可能是指生成的静态或动态链接库文件,用于在C++项目中直接引用。...

    JsonCpp和RapidJson使用对比

    在C++编程中,有多个库可用于解析、生成和操作JSON数据,JsonCpp和RapidJson就是其中两个常用的库。这篇文章将对这两个库进行详细对比,基于VS2010编译环境。 **JsonCpp** JsonCpp是一个开源的C++库,它提供了读写...

    解决jsoncpp未按照添加顺序输出字符串的问题

    添加元素时:: Json::Value root; root["name"] = Json::...这是因为jsoncpp内部使用map进行存储key,默认是从小到大的顺序进行排序; (2)附件为修改好的,可以按照添加顺序进行输出的jsoncpp;有需要的同学可以下载

    c++版本jsoncpp源码

    3. **易于使用**:jsoncpp提供了简洁的API,使得开发者可以快速地在C++项目中集成JSON支持。 4. **灵活性**:它支持多种数据类型,包括基本类型、数组、对象等,且允许在JSON值中嵌套其他JSON值。 在jsoncpp源码中...

    Jsoncpp支持longlong

    6. **内存管理**:Jsoncpp使用智能指针(如`Json::Value`)来管理内存,防止内存泄漏。但是,在处理大量数据时,仍需注意性能和内存消耗。 总之,Jsoncpp作为C++中处理JSON数据的强大工具,不仅支持基础类型如`long...

    jsoncpp-1.9.4_C++_jsoncpp-1.9.4_

    JSONCPP是一个开源库,专为C++开发人员设计,用于解析和生成JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,广泛应用于Web服务和跨平台通信。JSONCPP-1.9.4是这个库的一个特定版本,...

    JsonCPP C++ 动态库的使用

    注意,JsonCPP使用了错误处理机制,如果解析失败,会抛出错误信息。 在实际应用中,JsonCPP不仅可以用于解析JSON,还可以用于生成JSON。例如,你可以创建一个`Json::Value`对象,添加数据,然后转换回JSON字符串。...

    JsonCpp源码VS2008/VS2010编译成功

    JsonCpp是一个开源的C++库,用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,广泛...通过这样的实践,开发者不仅能掌握JsonCpp的使用,还能加深对C++项目构建和编译流程的理解。

    jsoncpp使用说明.docx

    JSONCPP使用说明文档主要介绍了如何在C++中利用jsoncpp库进行JSON数据的解析和构建。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它的语法简单且与多种编程语言兼容,使得数据交换变得方便快捷...

Global site tag (gtag.js) - Google Analytics