jsoncpp安装包使用

想对{"word": "以下", "offset": [52], "weight": -4.80665e+062},{"word": "商品", "offset": [15], "weight": -4.89186e+062}类似的字符串进行拆分,发现字符串加上[]中括号后,就和json字符串规则相似,故想到用json方式拆分字符串到相应的数据结果中。

一、json介绍:

JSON 的全称为:JavaScript Object Notation。

JSON 是用于标记 Javascript 对象的。

JSON 官方的解释为:JSON 是一种轻量级的数据传输格式,我们将它理解为一种数据类型就好。

其格式一般如下(下面程序会有例子):

{

     “Name“:“Json”,

     "Year":"1994",

     "Sex":"MAN",

     "Other":

      {

          "Height":"180",

           "Weight":"150"

       },

      "Parent":

      [

          {"Father":"C++"},

          {"Mother":"C"}

       ]

}

本来想找一个现成的能用的方法直接用,但是发现自己想多了,找来找去还是打算自己来编译一个新的能用的。

二、编译json_vc71_libmtd.lib

1、在https://github.com/open-source-parsers/jsoncpp下载了jsoncpp-master.zip,解压

2,之后按照https://blog.csdn.net/horizons_kong/article/details/78915438上面描述的方法,在jsoncpp-src-0.5.0/makefiles/vs71目录里找到jsoncpp.sln,用VS2012版本编译,默认生成静态链接库,生成了json_vc71_libmtd.lib文件,就没有再用第二种方式了

三、使用json_vc71_libmtd.lib

#include "json/json.h"    // 要设置include路径,和库文件包含路径
#ifdef _DEBUG
#pragma comment(lib,"json_vc71_libmtd.lib")
#else
#pragma comment(lib,"json_vc71_libmt.lib")
#endif

发现编译会出现以下类似的错误:

error LNK2005: __CrtSetCheckCount 已经在 MSVCRTD.lib(MSVCR110D.dll) 中定义

搜索了一下,找到了一篇文章,关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决

https://www.cnblogs.com/qinfengxiaoyue/archive/2013/02/01/2889668.html

里面讲了四种处理方法,看了两遍看的头疼,最终采用作者总结的方法

首先,所有的lib文件,使用/MTd或/MT编译(注:即静态链接模式)。Debug调试模式使用/MTd,Release模式使用/MT。

然后,在自己的程序中也使用/MTd或/MT编译。这样就不会出问题了”解决了问题

 

编译通过!!Happy!!!

 

四:字符串解析

借鉴了https://blog.csdn.net/u011261430/article/details/77713299/中C++ 使用Json封装数据和解析数据

具体实现:

//struct Word是一个自己定义的结构,包含word和weight等成员
void trans(string skeywordres, vector<struct Word> &keywordres)
{
	// 解析json用Json::Reader
    Json::Reader *readerinfo = new Json::Reader(Json::Features::strictMode());
    // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array...
    Json::Value root;  
	skeywordres = "["+skeywordres+"]";
    if (readerinfo->parse(skeywordres, root))
    {
        //{"word": "以下", "offset": [52], "weight": -4.80665e+062},
        if (root.isArray())
        {
            int nArraySize = root.size(); 
			cppjieba::KeywordExtractor::Word word;
            for (int i=0; i<nArraySize; i++)
            {       
                word.word = root[i]["word"].asString();
				//word.offsets = root[i]["offset"].asString();
				word.weight = root[i]["weight"].asDouble();
				keywordres.push_back(word);
            }
        }
	}

	 ::delete readerinfo;
    readerinfo = NULL;
}

测试可行。

此段代码可能不能直接运行,主要是对json的reader使用方法的介绍。

 

对以上借鉴的相关文章作者表示感谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值