一、JSON格式解析简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。与XML类似,JSON也是一种无须定义复杂DTD(Data Type Definition,数据类型定义),就可直接使用的格式。由于其简明的格式、易于阅读等特性,得到了广泛的应用。
二、libjson的用法介绍
- 简介
libjson是一个C++的JSON库,支持中文进行编码和解码,相对于其他JSON库而言,它的特点是:
(1)使用简单,轻松上手。
(2)精简,性能高效。
(3)完美兼容STL。
- 安装libjson
libjson目前支持Linux、Mac OS X、Windows和Android平台,当然还包括iOS和Marmalade等平台。你可以从官方网站上下载对应平台的安装包,或者使用包管理器进行安装。
- libjson的基本使用
在使用libjson进行JSON格式解析之前,我们需要将目标JSON字符串转化为json::Value类型的对象。主要有三种转化方式:
(1)使用parse()函数进行解析:
std::string jsonString = "{\"name\":\"Jack\",\"age\":20}";
json::Value value;
std::string errs;
json::parse(jsonString, value, errs);
(2)使用std::istringstream输入流进行解析:
std::string jsonString = "{\"name\":\"Jack\",\"age\":20}";
json::Value value;
std::istringstream iss(jsonString);
iss >> value;
(3)从文件中读取JSON字符串进行解析:
std::ifstream ifs("test.json");
json::Value value;
ifs >> value;
- cjson的使用方法介绍
cJSON是一个开源的JSON工具库。它可以在C/C++中处理JSON数据,功能相对简单,但支持的平台较广,使用也很方便。
- cjson的安装
cJSON的源代码可以从Github上下载。下载完成之后,可以将源文件中的“cjson.h”、“cjson.c”文件拷贝到项目中,然后在需要使用的源文件中直接包含头文件。
- cjson的基本使用
使用cJSON对JSON数据进行解析。我们可以通过cJSON_Parse函数来解析JSON字符串得到cJSON对象并且通过该对象的与之对应的函数来读取其中的各个属性。
#include "cjson.h"
int main()
{
char *jsonStr = "{\"name\":\"Jack\",\"age\":20}";
cJSON *json = cJSON_Parse(jsonStr);
if (json != NULL)
{
cJSON *name=cJSON_GetObjectItem(json,"name");
cJSON *age=cJSON_GetObjectItem(json,"age");
printf("name:%s, age:%d\n", name->valuestring, age->valueint);
cJSON_Delete(json);
}
return 0;
}
三、示例分析
- 示例一:使用libjson解析JSON格式的字符串
我们有如下的JSON字符串:
{
"name":"Jack",
"age":20,
"address":
{
"province":"Hubei",
"city":"Wuhan",
"district":"Hongshan"
}
}
使用libjson进行解析的代码如下:
#include <iostream>
#include <json/json.h>
int main()
{
std::string jsonString = "{\"name\":\"Jack\",\"age\":20,\"address\":{\"province\":\"Hubei\",\"city\":\"Wuhan\",\"district\":\"Hongshan\"}}";
Json::Reader reader;
Json::Value value;
reader.parse(jsonString, value);
std::string name = value["name"].asString();
int age = value["age"].asInt();
std::string province = value["address"]["province"].asString();
std::string city = value["address"]["city"].asString();
std::string district = value["address"]["district"].asString();
std::cout << "name:" << name << ", age:" << age << ", province:" << province << ", city:" << city << ", district:" << district << std::endl;
return 0;
}
输出结果:
name:Jack, age:20, province:Hubei, city:Wuhan, district:Hongshan
- 示例二:使用cjson解析JSON格式的字符串
我们有如下的JSON字符串:
{
"name":"Jack",
"age":20,
"address":
{
"province":"Hubei",
"city":"Wuhan",
"district":"Hongshan"
}
}
使用cjson进行解析的代码如下:
#include <stdio.h>
#include "cjson.h"
int main()
{
char *jsonStr = "{\"name\":\"Jack\",\"age\":20,\"address\":{\"province\":\"Hubei\",\"city\":\"Wuhan\",\"district\":\"Hongshan\"}}";
cJSON *json = cJSON_Parse(jsonStr);
if (json != NULL)
{
cJSON* name = cJSON_GetObjectItem(json, "name");
cJSON* age = cJSON_GetObjectItem(json, "age");
cJSON* prv = cJSON_GetObjectItem(cJSON_GetObjectItem(json, "address"), "province");
cJSON* city = cJSON_GetObjectItem(cJSON_GetObjectItem(json, "address"), "city");
cJSON* district = cJSON_GetObjectItem(cJSON_GetObjectItem(json, "address"), "district");
printf("name:%s, age:%d, province:%s, city:%s, district:%s",
name->valuestring, age->valueint, prv->valuestring, city->valuestring, district->valuestring);
cJSON_Delete(json);
}
return 0;
}
输出结果:
name:Jack, age:20, province:Hubei, city:Wuhan, district:Hongshan
总结:通过libson和cjson的使用,我们可以方便地对JSON格式的数据进行解析和生成。可以根据自己的需求来选择使用不同的JSON库,根据项目的需求抉择合适的JSON库非常重要。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:json格式解析和libjson的用法介绍(关于cjson的使用方法) - Python技术站