前言
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...
该压缩包“jsoncpp-0_c++jsoncpp_jsoncpp_jsoncpp-0.10.7_jsoncpp.lib_源码.zip”包含的是jsoncpp库的0.10.7版本的源代码和可能的库文件(jsoncpp.lib)。这个库文件是预编译的二进制形式,供开发者在他们的项目中...
JSONCPP 是一个 C++ 库,用于处理 JSON(JavaScript Object Notation)数据格式。这个库提供了多种类,便于在 C++ 程序中进行 JSON 数据的序列化和反序列化。下面是对 JSONCPP 中主要类及其方法的详细解析: 1. **...
这个"**c++ jsoncpp demo**"项目是针对C++编程者的一个示例,它演示了如何使用Jsoncpp库来解析、生成和操作JSON数据。 Jsoncpp是一个开源库,它为C++提供了读写JSON数据的接口。这个项目旨在帮助开发者了解如何在...
在 C/C++ 项目中使用 JSONCPP,开发者需要包含相应的头文件,链接 JSONCPP 动态库,并按照 API 文档编写代码来读写 JSON 数据。JSONCPP 提供了诸如 `Json::Value` 类来表示 JSON 值,`Json::Reader` 和 `Json::...
JsonCpp 是一个功能强大且易于使用的 C++ 库,适用于处理 JSON 数据。通过详细的指南,开发者可以轻松掌握如何构建和解析 JSON 数据,并将其集成到自己的应用中。无论是在桌面应用还是网络服务开发中,JsonCpp 都能...
JSONCPP 是一个开源库,专为C++设计,用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,被广泛应用于Web服务和应用程序之间的数据传输。在JSONCPP中,可能会遇到写入文件时...
在Android里有习惯了使用JsonObject进行网络数据传输,但是在C++下进行网络传输却没有现成的JsonObject库。JsonCpp是C++下的开源库,直接把cpp源代码和头文件提取出来就能使用。
了解并掌握这些知识点后,你将能够有效地在C++项目中使用`jsoncpp`库来处理JSON数据。无论是读取配置文件、与服务器进行数据交换还是存储用户数据,`jsoncpp`都能提供强大的支持。记住,正确处理错误和异常是确保...
JsonCpp是一个开源库,它为C++提供了处理JSON的工具,支持读写JSON文档以及与C++对象之间的转换。然而,在处理包含中文字符的JSON数据时,JsonCpp可能会遇到乱码问题,这是由于编码不兼容或者处理方式不当导致的。 ...
这个压缩包的名字"jsoncpp-0_c++jsoncpp_jsoncpp_jsoncpp-0.10.7_jsoncpp.lib_源码.rar"表明它是一个关于JSONCPP的C++实现,其中的"jsoncpp.lib"可能是指生成的静态或动态链接库文件,用于在C++项目中直接引用。...
在C++编程中,有多个库可用于解析、生成和操作JSON数据,JsonCpp和RapidJson就是其中两个常用的库。这篇文章将对这两个库进行详细对比,基于VS2010编译环境。 **JsonCpp** JsonCpp是一个开源的C++库,它提供了读写...
添加元素时:: Json::Value root; root["name"] = Json::...这是因为jsoncpp内部使用map进行存储key,默认是从小到大的顺序进行排序; (2)附件为修改好的,可以按照添加顺序进行输出的jsoncpp;有需要的同学可以下载
3. **易于使用**:jsoncpp提供了简洁的API,使得开发者可以快速地在C++项目中集成JSON支持。 4. **灵活性**:它支持多种数据类型,包括基本类型、数组、对象等,且允许在JSON值中嵌套其他JSON值。 在jsoncpp源码中...
6. **内存管理**:Jsoncpp使用智能指针(如`Json::Value`)来管理内存,防止内存泄漏。但是,在处理大量数据时,仍需注意性能和内存消耗。 总之,Jsoncpp作为C++中处理JSON数据的强大工具,不仅支持基础类型如`long...
JSONCPP是一个开源库,专为C++开发人员设计,用于解析和生成JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,广泛应用于Web服务和跨平台通信。JSONCPP-1.9.4是这个库的一个特定版本,...
注意,JsonCPP使用了错误处理机制,如果解析失败,会抛出错误信息。 在实际应用中,JsonCPP不仅可以用于解析JSON,还可以用于生成JSON。例如,你可以创建一个`Json::Value`对象,添加数据,然后转换回JSON字符串。...
JsonCpp是一个开源的C++库,用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,广泛...通过这样的实践,开发者不仅能掌握JsonCpp的使用,还能加深对C++项目构建和编译流程的理解。
JSONCPP使用说明文档主要介绍了如何在C++中利用jsoncpp库进行JSON数据的解析和构建。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它的语法简单且与多种编程语言兼容,使得数据交换变得方便快捷...