在VC中生成嵌套JSON

来源:互联网 发布:淘宝排名查询 客户达 编辑:程序博客网 时间:2024/06/09 19:57

#include "jsoncpp/include/json.h"

 //用网上下载的JSON类

 

 

 Json::Value root;
 Json::Value var;
 Json::Value jFdata;

 

//比方说,一个目录级别如下:

 c://files//testFile//datas//{1.text,2.text,3.text .4.text}

 

 //生成的目录如下:

{"folders":"files","data":[{"folders":"testFile","data":[{"folders":"datas","data":[{"filename":"1.text"},{"filename":"2.text"},{"filename":"3.text"},{"filename":"4.text"}]}]}]}

 

 

 CStringArry folderslist;//假设已经保存了所有的目录结构

 folderslist.add("files");

 folderslist.add("ftestFile");

 folderslist.add("datas");

 

 

 CStringArry fileslist;//假设已经保存了所有的目录结构

 fileslist.add("1.text");

 fileslist.add("2.text");

 fileslist.add("3.text");

 fileslist.add("4.text");

 

 //先生成四个文件JSON

   Json::Value jlData;

   for(int ifilePos = 0;ifilePos<4,ifilePos++)

{

   Json::Value piece_ex;//here it store just one piece
   //next 4 lines to apply piece value to json struct
   piece_ex["folders"]       =  fileslist.get(ifilePos );
     jlData.append(piece_ex);//ok,yes we just have apply One piece ,then push back to the array

}

 

//生成嵌套JSON目录,从最深层往外生成

Json::Value jcFdata;
 for(int iFoldersPos = 2 ;iFoldersPos >=0 ;--iFoldersPos)
 {
  Json::Value jccData;
  Json::Value jccRoot;
  jccData["fname"]   = folderslist.get(iFoldersPos );
   if(iFoldersPos == listFolders.GetCount()-1)
  {
   jccData["folders"] = jlData;
  }
  else
  {
   jccData["folders"] = jcFdata;
  }
  jcFdata = jccData;
 }
 jFdata.append(jcFdata);

 

 var["data"] = jFdata;//yes,store pieces in var [Value]
 root.append(var);
 Json::FastWriter writer;
 CString szData(writer.write(var).c_str());

原创粉丝点击