JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 --==- 附上可以编译的程序

最近因为团队需要
我做了一个爬虫,爬虫的需求很简单
1. Login 网页->得到数据->分析->发送一个请求命令
   主要的数据全是Json , 近期整理出来,关于部分数据的整理 
Python 准备融合到C++里面,这样我就可以减轻HTTP那些恶心的c++封装,纯属偷懒

下面这小段程序是官方的,编译不过,如果你有编译过的,记得抄送我一份
const Json::Value plugins = root["plug-ins"];
for ( int index = 0; index < plugins.size(); ++index )  // Iterates over the sequence elements.
   loadPlugIn( plugins[index].asString() );
   
setIndentLength( root["indent"].get("length", 3).asInt() );
setIndentUseSpace( root["indent"].get("use_space", true).asBool() 
上面这段Code Example 真是...
 
下面上代码
设计思路: 生成一个Json文件->存盘->读取(普通 和 数组都有)
// jsonLibRe.cpp : 定义控制台应用程序的入口点。
//




#include "stdafx.h"
#include
#include  
#include
#include
#include "json.h"








TCHAR szFullConfName[2*MAX_PATH + 1] = {0};




void saveStringToFile(std::string szSaveString)
{
TCHAR szFilePath[MAX_PATH + 1];  GetModuleFileName(NULL, szFilePath, MAX_PATH); 
(_tcsrchr(szFilePath, _T('\\')))[1] = 0;//删除文件名,只获得路径



TCHAR str_url[2*MAX_PATH + 1] = {0};
lstrcat(str_url, szFilePath); lstrcat(str_url, _T("msg.json") );
//only for log lstrcat(szFullConfName, str_url);
//
std::ofstream otof(str_url);  otof<< szSaveString;
otof.flush(); otof.close();
}




int main(int argc, char* argv[])
{
//解析json Json::Value jsRoot;
Json::Value jsArray; Json::Value jsItem;




for (int i = 0; i < 10 ; i++ ) {
jsItem["id"] = i; jsItem["Name"] = "农田";
jsArray.append(jsItem); }
jsRoot["FirstName"] = "Eagle"; jsRoot["LastName"] = "Zhao";




std::string szShowCurrJSON = jsRoot.toStyledString(); //std::cout<< szShowCurrJSON <
//std::cout<< "--==========================================--" <



//szShowCurrJSON.empty(); //szShowCurrJSON = jsArray.toStyledString();
//std::cout<< szShowCurrJSON <//std::cout<< "--==========================================--" <




jsRoot["JSONArray"] = jsArray; szShowCurrJSON.empty();
szShowCurrJSON = jsRoot.toStyledString(); //std::cout<< szShowCurrJSON <
std::cout<< "--==========================================--" <



//save JSON to file saveStringToFile(szShowCurrJSON);




//--======================Reader file====================================-- // Reader file and show Json
Json::Value jsReadValue; std::ifstream in(szFullConfName);
std::string szReadstr; std::string szReadmsg;




if(in.is_open()) {
while(in>>szReadstr) szReadmsg += szReadstr;
}



Json::Reader jsReader;



int ret = jsReader.parse(szReadmsg,jsReadValue);



if(ret)
std::string FN = jsReadValue["FirstName"].asString(); std::string LN = jsReadValue["LastName"].asString();
std::cout<std::cout<

/** [["key1":value1],["key2":value2] ]
**/ Json::Value jsArrayReaderValue ;
jsArrayReaderValue = jsReadValue["JSONArray"]; int iASize =  jsArrayReaderValue.size();
for ( int i=0; i < iASize;i++ ) {
int nID = jsArrayReaderValue[i]["id"].asInt(); std::string szName = jsArrayReaderValue[i]["Name"].asString();
std::cout<}








}




in.close(); return 0;
}
/**
//本文设计的Jason 文件内容,程序会自动生成://
{
"FirstName" : "Eagle",
"JSONArray" : [
{
"Name" : "农田",
"id" : 0
},
{
"Name" : "农田",
"id" : 1
},
{
"Name" : "农田",
"id" : 2
},
{
"Name" : "农田",
"id" : 3
},
{
"Name" : "农田",
"id" : 4
},
{
"Name" : "农田",
"id" : 5
},
{
"Name" : "农田",
"id" : 6
},
{
"Name" : "农田",
"id" : 7
},
{
"Name" : "农田",
"id" : 8
},
{
"Name" : "农田",
"id" : 9
}
],
"LastName" : "Zhao"
}
/


下面的收集来自与网络
http://api.minicloud.com.cn/statuses/public_timeline.json返回的格式为无名数组。




那么又该如何解析呢?




参考代码如下
  reader.parse(apiret,value);
    for(int i = 0;i < value.size();++i)
  { string text = value[i]["text"].asString();
cout<}
json对数组的解析还支持STL的风格。即




Json::Value::Members member;//Members  这玩意就是vector,typedef了而已 for (Json::Value::iterator itr = objArray.begin(); itr != objArray.end(); itr++)
{ member = (*itr).getMemberNames();
for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); iter++) {
string str_temp = (*itr)[(*iter)].asString(); }
}



**/

你可能感兴趣的:(JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 --==- 附上可以编译的程序)