Jsoncpp遍历

前端之家收集整理的这篇文章主要介绍了Jsoncpp遍历前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用Jsoncpp代码比较简单,各个类都容易理解,这里说一下遍历这个Json数据的方式。源码中直接提供了测试代码,D:\code\jsoncpp-src-0.6.0-rc2\src\jsontestrunner\main.cpp,里面printValueTree就是遍历函数,下面贴代码

fout:输出设备,可以是控制台或文件

Value:这个是Json数据解码后的基本单元,或者节点

path: 各层节点的分级字符串

代码很简单,递归输出成字符串,只有一个地方解释一下,Json::Value::Member 就是 vector<string> ,可以从value类中看到typedef std::vector<std::string>Json::Value::Members

  1. static void
  2. printValueTree( FILE *fout,Json::Value &value,const std::string &path = "." )
  3. {
  4. switch ( value.type() )
  5. {
  6. case Json::nullValue:
  7. fprintf( fout,"%s=null\n",path.c_str() );
  8. break;
  9. case Json::intValue:
  10. fprintf( fout,"%s=%s\n",path.c_str(),Json::valueToString( value.asLargestInt() ).c_str() );
  11. break;
  12. case Json::uintValue:
  13. fprintf( fout,Json::valueToString( value.asLargestUInt() ).c_str() );
  14. break;
  15. case Json::realValue:
  16. fprintf( fout,"%s=%.16g\n",value.asDouble() );
  17. break;
  18. case Json::stringValue:
  19. fprintf( fout,"%s=\"%s\"\n",value.asString().c_str() );
  20. break;
  21. case Json::booleanValue:
  22. fprintf( fout,value.asBool() ? "true" : "false" );
  23. break;
  24. case Json::arrayValue:
  25. {
  26. fprintf( fout,"%s=[]\n",path.c_str() );
  27. int size = value.size();
  28. for ( int index =0; index < size; ++index )
  29. {
  30. static char buffer[16];
  31. sprintf( buffer,"[%d]",index );
  32. printValueTree( fout,value[index],path + buffer );
  33. }
  34. }
  35. break;
  36. case Json::objectValue:
  37. {
  38. fprintf( fout,"%s={}\n",path.c_str() );
  39. Json::Value::Members members( value.getMemberNames() );
  40. std::sort( members.begin(),members.end() );
  41. std::string suffix = *(path.end()-1) == '.' ? "" : ".";
  42. for ( Json::Value::Members::iterator it = members.begin();
  43. it != members.end();
  44. ++it )
  45. {
  46. const std::string &name = *it;
  47. printValueTree( fout,value[name],path + suffix + name );
  48. }
  49. }
  50. break;
  51. default:
  52. break;
  53. }
  54. }

如果你对该目录下的main.cpp文件感兴趣,不妨把它编译成exe,这里直接通一个在控制台使用cl编译的简单批处理脚本,直接在jsoncpp-src-0.6.0-rc2目录下执行:

jsoncpp-src-0.6.0-rc2

echo off
echo start comparing and linking...
echo ..............................
cl .\src\jsontestrunner\main.cpp .\src\lib_json\*.cpp /I .\include\json\ /I .\include
echo delete *.obj files...
del.\*.obj
pause
echo on

使用时的命令行参数为后缀名 为.json的json格式文件,解析后会在同级目录下生成3个解析文件

猜你在找的Json相关文章