C++的Json解析库:jsoncpp

来源:互联网 发布:那个软件有柯南漫画 编辑:程序博客网 时间:2024/05/17 00:52

环境

首先,我是参考了C++的Json解析库:jsoncpp这篇博客。进行下源码,进行编译。以上过程不再赘述。

在使用过程中遇到的问题

vs2010报出如下错误:

1>json_vc71_libmtd.lib(json_value.obj) : error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义1>json_vc71_libmtd.lib(json_value.obj) : error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义1>json_vc71_libmtd.lib(json_value.obj) : error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义1>json_vc71_libmtd.lib(json_value.obj) : error LNK2005: "public: struct std::_Iterator_base12 * * __thiscall std::_Container_base12::_Getpfirst(void)const " (?_Getpfirst@_Container_base12@std@@QBEPAPAU_Iterator_base12@2@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义1>json_vc71_libmtd.lib(json_reader.obj) : error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义1>json_vc71_libmtd.lib(json_reader.obj) : error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义1>json_vc71_libmtd.lib(json_reader.obj) : error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义

很长很啰嗦,之后又从网上找到了一个办法,不是源码的问题,是个设置的问题。
步骤如下:
第一步:这里写图片描述

第二步:
这里写图片描述

以上就是问题的解决步骤。

总结

  1. 任何文字说明都没有直接的按图片进行设置效果直观
  2. 设置成多线程调试(/MTd)即可,原因是原来的库是静态库下的debug版本。

测试源码

    // TestJson.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"// #include "../json/autolink.h"// #include "../json/config.h"// #include "../json/features.h"// #include "../json/forwards.h" #include "../json/json.h"// #include "../json/reader.h"// #include "../json/value.h"// #include "../json/writer.h"#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string>#include <fstream>#pragma comment(lib,"json_vc71_libmtd.lib")using namespace std;//从字符串中解析数据int ParseJsonFromString(){    const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";    Json::Reader reader;    Json::Value root;    if (reader.parse(str,root))    {        std::string upload_id = root["uploadid"].asString();//访问节点,upload_id = "UP000000"        cout<<"upload_id = "<<upload_id<<endl;        int code = root["code"].asInt();//访问节点,code= 100;        cout<<"code = "<<code<<endl;    }    return 0;}int ParseJsonFromFile(const char* fileName){    //解析json用Json::Reader;    Json::Reader reader;    //Json::value 是一种很重要的类型,可以代表任意类型。如int,string,object,array.....    Json::Value root;    std::ifstream is;    //std::ifstream    is.open(fileName,std::ios::binary);    if(reader.parse(is,root)){        std::string code;        if (!root["files"].isNull())        {            code = root["uploadid"].asString();        }        code = root.get("uploadid","null").asString();        //得到“files”的个数        int file_size = root["files"].size();        cout<<"file_size = "<<file_size<<endl;        //遍历数组        for (int i = 0;i<file_size;++i)        {            cout<<"image "<<i <<":"<<endl;            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();                cout<<"type = "<<type<<endl;                std::string url = val_image[j]["url"].asString();                cout<<"url = "<<url<<endl;            }        }       }    is.close();    return 0;}//3.在json结构中插入jsonvoid InsertJson(){    Json::Value root;    //Json::Value file;    //file["files"]=;    ///*root["files"] = "";*/    //root.append(file);    Json::Value arrayObj;//构建对象    Json::Value new_item1,new_item2;    new_item1["date"] = "2011-12-28";    new_item2["time"]="22:30:36";    arrayObj.append(new_item1);    arrayObj.append(new_item2);    root["files"].append(arrayObj);    root["files"].append(arrayObj);    cout<<"files size = "<<root.size()<<endl;//files,包含的第一层中括号的个数    cout<<"files size = "<<root["files"].size()<<endl;//数组里面的元素个数    cout<<root.toStyledString()<<endl;    //arrayObj["files"].append(new_item1);    //arrayObj["files"].append(new_item2);    ////转换为字符串(有格式的)    //cout<<arrayObj.toStyledString()<<endl;    //    ////输出为无格式的字符串(无格式的)    //Json::FastWriter writer;    //std::string out2 = writer.write(arrayObj);    //cout<<out2<<endl;    /*int file_size = root["files"].size();     cout<<"file_size = "<<file_size<<endl;    for (int i = 0;i<file_size;++i)    {    root["files"][i]["exifs"] = arrayObj;    }*/}int _tmain(int argc, _TCHAR* argv[]){    ////std::cout<<"dfadf"<<endl;    //ParseJsonFromFile("e:/json.dat");    //InsertJson();    return 0;}
0 0
原创粉丝点击