• 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 <iostream>
    #include <fstream> 
    #include <string>
    #include <Windows.h>
    #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 loglstrcat(szFullConfName, str_url);
    //
    std::ofstream otof(str_url); otof<< szSaveString;
    otof.flush();otof.close();
    }




    int main(int argc, char* argv[])
    {
    //解析jsonJson::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::endl;
    //std::cout<< "--==========================================--" <<std::endl;



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




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



    //save JSON to filesaveStringToFile(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<<FN <<std::endl;std::cout<<LN <<std::endl;

    /** [["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<<szName <<nID << std::endl;}








    }




    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<<text<<endl;}
    json对数组的解析还支持STL的风格。即




    Json::Value::Members member;//Members  这玩意就是vector<string>,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();}
    }



    **/
  • 相关阅读:
    使用pull解析XML文件
    使用Pull解析器生成XML文件
    Android下文件访问的权限
    Android之SharedPreference存储数据
    Android之外部存储(SD卡)
    Android的内部存储
    Android数据存储的方式
    点击事件的四种写法
    Context
    EclipseADT编写单元测试代码的步骤
  • 原文地址:https://www.cnblogs.com/eaglezzb/p/4176533.html
Copyright © 2020-2023  润新知