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) 中定义
很长很啰嗦,之后又从网上找到了一个办法,不是源码的问题,是个设置的问题。
步骤如下:
第一步:
第二步:
以上就是问题的解决步骤。
总结
- 任何文字说明都没有直接的按图片进行设置效果直观。
- 设置成多线程调试(/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
- C++的Json解析库:jsoncpp
- json解析库jsoncpp的使用
- C++的Json解析库:jsoncpp
- C++的Json解析库:jsoncpp
- C++的Json解析库:jsoncpp
- 【C++】JSON数据解析——jsoncpp的使用
- 【C++】JSON数据解析——jsoncpp的使用
- 【C++】JSON数据解析——jsoncpp的使用
- C++解析JSON jsoncpp库
- Json解析(C++)——jsoncpp
- C++/MFC使用JSONCPP解析JSON字符串
- jsoncpp一个简单的解析json的库
- C++的Json解析库:jsoncpp和boost
- C++的Json解析库:jsoncpp和boost
- C++的Json解析库:jsoncpp和boost
- C++的Json解析库:jsoncpp和boost .
- C++的Json解析库:jsoncpp和boost
- C++的Json解析库:jsoncpp和boost (转)
- 12 个 CSS 高级技巧汇总
- PHP正则表达式常用例子
- CvMat,Mat,Iplimage的理解和应用
- Linux内核中的等待队列--init_waitqueue_head等
- Hello World
- C++的Json解析库:jsoncpp
- View角度与弧度(转载)-2
- 解决url中有空格 在encode的时候HttpURLConnection识别不了的问题
- php字符串处理函数
- 2016年度中国手游报告:梦幻西游手游是最大赢家
- failed while changing version of java
- 简单的Jqurey Ajax各个参数及作用
- Centos 7防火墙firewall-cmd
- Python使用BeautifulSoup解析文档不全