想对{"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使用方法的介绍。
对以上借鉴的相关文章作者表示感谢!!