开源解析库 - JSON
Json及其实现
JSON作为一种轻量级的数据交换格式,多被用于跨语言通信(比如CPP与PHP之间的数据交互)。
至于何为JSON,其详细解释参考 官网。
既然是一种格式,那便必然有相应的编码实现。在CPP中,以 jsoncpp 为例,我来阐述 JSON 的具体使用。
jsoncpp不依赖第三方库,只需要包含相关头文件即可,具体的源码可以参考 这里。其语法很简洁,一看就懂,不做赘述。
Json的赋值
Json::Value root;
root["Types"] = Json::Value("名号");
root["Types"] = Json::Value("人物");
root["Attributes"] = Json::Value("生年");
root["Attributes"] = Json::Value("国别");
std::cout << "Json::Value size: " << root.size() << std::endl;
std::cout << "Normal Json::Value: " << root << std::endl;
以上,就是很常见的 Json::Value 的使用。
Json的解析
仅仅是使用 Json::Value 生成特定的格式是不够的,解析也是关键。
先是赋值:
Json::Value root;
Json::FastWriter fast;
Json::Value m_exploit;
root["roleId"] = 10009;
root["exploit"] = 10376;
m_exploit.append(root);
root["roleId"] = 10006;
root["exploit"] = 2447;
m_exploit.append(root);
但我们在实际的跨语言通信中一般不会直接用 Json::Value 进行交互,往往会把它写入 字符串 再传输:
std::string sExploit = fast.write(m_exploit);
值得注意的是, Json::Value 的数据以 换行符 结尾,因此有必要对它稍做处理:
sExploit.erase(sExploit.end()-1);
接着解析:
Json::Value json_value_j;
Json::Reader json_reader_j;
if (json_reader_j.parse(sExploit, json_value_j))
{
std::cout << "json_value_j: " << json_value_j;
int nSize = static_cast<int>(json_value_j.size());
for(int i = 0; i < nSize; ++i)
{
int roleId = json_value_j[i]["roleId"].asInt();
std::cout << "roleId: " << roleId << std::endl;
}
}
解析使用 Json::Reader 的 parse() 函数即可。
提示
Json::Value 类内部使用了 map 容器做存储,所以创建该类型的数据时会以key自动排序。
扩展
有兴趣的话,也可以自己实现 Json 的解析器,语法并不复杂。一个有趣的参考在 这里。
结语
祝观赏本文愉快,版权归我所有,转载随意,但请勿用于邪恶的用途。

浙公网安备 33010602011771号