看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,所以要做好异常判断, 也要注意类型。