利用rapidjson解析嵌套的json
来源:互联网 发布:杨修之死 知乎 编辑:程序博客网 时间:2024/04/29 21:29
看json串1: {"system":{"version":"v2.6.1", "name":"value"}}
废话少说, 直接撸代码:
#include <iostream>#include <stdio.h>#include<unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<sstream>// 请自己下载开源的rapidjson#include "rapidjson/prettywriter.h"#include "rapidjson/rapidjson.h"#include "rapidjson/document.h"#include "rapidjson/stringbuffer.h"#include "rapidjson/writer.h"#include "rapidjson/memorystream.h"using namespace std;using rapidjson::Document;using rapidjson::StringBuffer;using rapidjson::Writer;using namespace rapidjson;string getVersion(const string &jvStr){Document document;if (document.Parse(jvStr.c_str()).HasParseError() || !document.HasMember("system")) {return "";}const rapidjson::Value &jvObject = document["system"];if(!jvObject.IsObject()){return "";}if(!jvObject.HasMember("version")){return "";}const rapidjson::Value &jv = jvObject["version"];return jv.GetString();}int main(int argc, char *argv[]){string s = "{\"system\":{\"version\":\"v2.6.1\", \"name\":\"value\"}}";cout << s << endl;cout << getVersion(s) << endl;return 0;}结果:
{"system":{"version":"v2.6.1", "name":"value"}}
v2.6.1
再看字符串: {"system": "{\"version\":\"v2.6.1\", \"name\":\"value\"}"}
直接上马:
#include <iostream>#include <stdio.h>#include<unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<sstream>// 请自己下载开源的rapidjson#include "rapidjson/prettywriter.h"#include "rapidjson/rapidjson.h"#include "rapidjson/document.h"#include "rapidjson/stringbuffer.h"#include "rapidjson/writer.h"#include "rapidjson/memorystream.h"using namespace std;using rapidjson::Document;using rapidjson::StringBuffer;using rapidjson::Writer;using namespace rapidjson;string getStringFromJson(const string &jsStr, const string &strKey) { Document document; if (document.Parse(jsStr.c_str()).HasParseError() || !document.HasMember(strKey.c_str())) { return ""; } const rapidjson::Value &jv = document[strKey.c_str()]; return jv.GetString(); } int main(int argc, char *argv[]){string s = "{\"system\": \"{\\\"version\\\":\\\"v2.6.1\\\", \\\"name\\\":\\\"value\\\"}\"}";cout << s << endl;string str = getStringFromJson(s, "system");cout << str << endl;cout << getStringFromJson(str, "version") << endl;return 0;}结果:
{"system": "{\"version\":\"v2.6.1\", \"name\":\"value\"}"}
{"version":"v2.6.1", "name":"value"}
v2.6.1
第二种方式的json串, 看起来太恶心了。
另外, 再次强调一下, json串解析的时候, 容易core dump, 所以要做好异常判断, 也要注意类型。
阅读全文
1 0
- 利用rapidjson解析嵌套的json
- c++解析json文件: Rapidjson
- json: RapidJson 解析(1)
- 使用rapidJson解析json文件
- cocos2d-x RapidJson解析json
- Android利用Gson解析嵌套多层的Json
- Android利用Gson解析嵌套多层的Json
- Android利用Gson解析嵌套多层的Json
- 【转】Android利用Gson解析嵌套多层的Json
- 利用Gson解析多层嵌套的JSON数据
- Rapidjson的简单使用(拼接json串,存取文件中的json,解析json串)
- Rapidjson的简单使用(拼接json串,存取文件中的json,解析json串)
- rapidjson将嵌套map转为嵌套json------人生苦短,我用rapidjson
- C++ JSON 解析——RapidJSON介绍
- C++常用库/Json解析库--RapidJson
- rapidjson解析json代码实例以及常见的json core dump问题
- 【RapidJson】Rapidjson解析
- flex 端json嵌套json的解析
- 接口----多实现
- 经典面试题
- OpenStack--网络环境实践(一)
- HTTP缓存机制
- Anaconda
- 利用rapidjson解析嵌套的json
- c++知识点----输出宽度填充以及运算符重载
- spring装配bean
- Java 接口的加深理解
- 数据结构之从有序的顺序表中删除所有其值重复的元素,使表中的元素均不相同
- 面向对象思想的设计原则
- CTEX2.9.2+Texmaker+SumatraPDF
- CF 163D Large Refrigerator
- 抽象工厂模式和工厂模式的区别