jsoncpp的使用 c++解析json数据

从使用开始说起。

从官网上下载一个jsoncpp的压缩包,我下载的是jsoncpp-src-0.5.0.tar.gz    下载地址:http://sourceforge.net/projects/jsoncpp/

直接解压,我用到vs2010,选择打开‘’项目/解决方案‘’,选择解压后的

jsoncpp-src-0.5.0\makefiles\vs71\jsoncpp.sln ,

1、打开后编译,生成静态链接库

(生成到链接库路径:jsoncpp-src-0.5.0\build\vs71\debug\lib_json\json_vc71_libmtd.lib-------------------------

<Release下为json_vc71_libmt.lib,Debug为json_vc71_libmtd.lib>----------------)。

注意!! 打开json工程,编译前,右键-->属性-->C/C++-->代码生成-->运行库 查询此选择的属性 和你的工程属性是否相同,需要保持一致才可以

2、json_vc71_libmtd.lib将其复制到vs工程的的lib里(即直接复制到项目中)。

在.cpp文件中增加 #pragma comment(lib,"json_vc71_libmtd.lib")  ,

包含一下json.h 等相关头文件(按需来),直接从jsoncpp-src-0.5.0\include\json下复制到项目到头文件的文件夹中,再include一下

在工程属性中链接器->输入->附加依赖项填入这个lib的名字 json_vc71_libmtd.lib

 

(如果遇到一些引用到问题,可以看这个https://mp.csdn.net/postedit/103202396)

网上还有另外一种方法,没验证过,仅供参考::

方法二:使用Jsoncpp包中的.cpp和.h文件
      解压上面下载的Jsoncpp文件,把jsoncpp-src-0.5.0文件拷贝到工程目录下,将jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\json和jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json目录里的文件包含到VS工程中,在VS工程的属性C/C++下General中Additional Include Directories包含头文件目录.\jsoncpp-src-0.5.0\include。在使用的cpp文件中包含json头文件即可,如:#include "json/json.h"。将json_reader.cpp、json_value.cpp和json_writer.cpp三个文件的Precompiled Header属性设置为Not Using Precompiled Headers,否则编译会出现错误。

 

json用法:

解析字符串

CString strResponse;//从服务器拿回的数据

char *pmsg = strResponse.GetBuffer(strResponse.GetLength());
    Json::Reader reader;  
    Json::Value root;  
    if (reader.parse(pmsg, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素  
    {  
        std::string key = root["key"].asString();  // 访问节点  ;  
        std::string key2 = root["key2"].asString();  // 访问节点  ;
        MessageBox((key + string(" ") + key2).c_str() );
    }  

还有网络上另外几种用法

解析json文件

int ReadJsonFromFile(const char* filename)  
{  
    Json::Reader reader;// 解析json用Json::Reader   
    Json::Value root; // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array         

    std::ifstream is;  
    is.open (filename, std::ios::binary );    
    if (reader.parse(is, root, FALSE))  
    {  
        std::string code;  
        if (!root["files"].isNull())  // 访问节点,Access an object value by name, create a null member if it does not exist.  
            code = root["uploadid"].asString();  
        
        code = root.get("uploadid", "null").asString();// 访问节点,Return the member named key if it exist, defaultValue otherwise.    

        int file_size = root["files"].size();  // 得到"files"的数组个数  
        for(int i = 0; i < file_size; ++i)  // 遍历数组  
        {  
            Json::Value val_image = root["files"][i]["images"];  
            int image_size = val_image.size();  
            for(int j = 0; j < image_size; ++j)  
            {  
                std::string type = val_image[j]["type"].asString();  
                std::string url  = val_image[j]["url"].asString(); 
                printf("type : %s, url : %s \n", type.c_str(), url.c_str());
            }  
        }  
    }  
    is.close();  

    return 0;  
} 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值