您的位置:首页 > Web前端 > JavaScript

用 jsonCpp 序列化、反序列化 json 字符串

2013-08-31 20:35 204 查看
原文链接:http://www.cnblogs.com/ggjucheng/archive/2012/01/03/2311107.html

前言

JSON是一个轻量级的数据定义格式,比起XML易学易用,

而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择

JSON 的全称为:JavaScript Object Notation ,顾名思义,

JSON 是用于标记 javascript 对象的,详情参考 http://www.json.org/。
本文选择第三方库 JsonCpp 来解析 json, JsonCpp 是比较出名的 c++ 解析库,在 json 官网也是首推的。
JsonCpp 简介

JsonCpp 主要包含三个类:Value Reader Writer

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

注意:

Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序使用 Unicode 编码的,最好加一个 Adapt 类来适配。
反序列化 Json 对象

假设有一个 json 对象如下:

{
"name": "json″,
"array": [
{
"cpp": "jsoncpp"
},
{
"java": "jsoninjava"
},
{
"php": "support"
}
]
}
我们要实现这个 json 的反序列号代码如下:
using namespace std;
using namespace Json;

void readJson() {
string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";

Reader reader;
Value value;

if (reader.parse(strValue, value)) {
string out = value["name"].asString();
cout << out << 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();
cout << out;
if (i != (arrayObj.size() - 1)) {
cout << endl;
}
}
}
}
序列化 Json 对象
using namespace std;

void writeJson() {

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();
string out = root.toStyledString();
cout << out << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐