利用rapidjson解析嵌套的json

前端之家收集整理的这篇文章主要介绍了利用rapidjson解析嵌套的json前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

看json串1: {"system":{"version":"v2.6.1","name":"value"}}

废话少说, 直接撸代码

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include<unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include<sstream>
  8.  
  9. // 请自己下载开源的rapidjson
  10. #include "rapidjson/prettywriter.h"
  11. #include "rapidjson/rapidjson.h"
  12. #include "rapidjson/document.h"
  13. #include "rapidjson/stringbuffer.h"
  14. #include "rapidjson/writer.h"
  15. #include "rapidjson/memorystream.h"
  16.  
  17. using namespace std;
  18. using rapidjson::Document;
  19. using rapidjson::StringBuffer;
  20. using rapidjson::Writer;
  21. using namespace rapidjson;
  22.  
  23. string getVersion(const string &jvStr)
  24. {
  25. Document document;
  26. if (document.Parse(jvStr.c_str()).HasParseError() || !document.HasMember("system"))
  27. {
  28. return "";
  29. }
  30.  
  31. const rapidjson::Value &jvObject = document["system"];
  32. if(!jvObject.IsObject())
  33. {
  34. return "";
  35. }
  36.  
  37. if(!jvObject.HasMember("version"))
  38. {
  39. return "";
  40. }
  41. const rapidjson::Value &jv = jvObject["version"];
  42. return jv.GetString();
  43. }
  44.  
  45.  
  46. int main(int argc,char *argv[])
  47. {
  48. string s = "{\"system\":{\"version\":\"v2.6.1\",\"name\":\"value\"}}";
  49. cout << s << endl;
  50. cout << getVersion(s) << endl;
  51. return 0;
  52. }
结果:

{"system":{"version":"v2.6.1","name":"value"}}
v2.6.1



再看字符串:{"system": "{\"version\":\"v2.6.1\",\"name\":\"value\"}"}

直接上马:

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include<unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include<sstream>
  8.  
  9. // 请自己下载开源的rapidjson
  10. #include "rapidjson/prettywriter.h"
  11. #include "rapidjson/rapidjson.h"
  12. #include "rapidjson/document.h"
  13. #include "rapidjson/stringbuffer.h"
  14. #include "rapidjson/writer.h"
  15. #include "rapidjson/memorystream.h"
  16.  
  17. using namespace std;
  18. using rapidjson::Document;
  19. using rapidjson::StringBuffer;
  20. using rapidjson::Writer;
  21. using namespace rapidjson;
  22.  
  23. string getStringFromJson(const string &jsStr,const string &strKey)
  24. {
  25. Document document;
  26. if (document.Parse(jsStr.c_str()).HasParseError() || !document.HasMember(strKey.c_str()))
  27. {
  28. return "";
  29. }
  30.  
  31. const rapidjson::Value &jv = document[strKey.c_str()];
  32. return jv.GetString();
  33. }
  34.  
  35. int main(int argc,char *argv[])
  36. {
  37. string s = "{\"system\": \"{\\\"version\\\":\\\"v2.6.1\\\",\\\"name\\\":\\\"value\\\"}\"}";
  38. cout << s << endl;
  39. string str = getStringFromJson(s,"system");
  40. cout << str << endl;
  41. cout << getStringFromJson(str,"version") << endl;
  42. return 0;
  43. }
结果:

{"system": "{\"version\":\"v2.6.1\",\"name\":\"value\"}"}
{"version":"v2.6.1","name":"value"}
v2.6.1

第二种方式的json串, 看起来太恶心了。


另外, 再次强调一下, json串解析的时候, 容易core dump,所以要做好异常判断, 也要注意类型。

猜你在找的Json相关文章