java 异构数据_json-mapper-java

JsonFormat

Json数据格式映射

调用说明

测试模式-将json-format.properties文件中的testMode设置为true

JSONFormat.jsonObjectFormat(null);// 解析一条json对象

JSONFormat.jsonArrayFormat(null);// 解析json数组

非测试模式-将json-format.properties文件中的testMode设置为false

设需要处理的原始数据为JSONObject

添加semType标识

jsonObject.put("semtype", "IqiyiVideo");

JSONFormat.jsonObjectFormat(json字符串);// 解析一条json对象

设需要处理的原始数据为JSONArray

JSONObject jsonObject = new JSONObject();

jsonObject.put("semtype", "IqiyiVideo");

jsonArray.add(jsonObject);

JSONFormat.jsonArrayFormat(json字符串);// 解析json数组

原理

在移动搜索引擎项目中,不同爬虫爬取下来的数据格式千差万别,其中相同语义的字段在不同APP中名称不同,如视频标题在xxx1应用中可能取名为title,在xxx2应用中取名为name.

当需要对外提供视频类的数据时,需要对这些字段进行映射处理,将它们统一为同一名称如videoName.

此项目通过配置文件实现语义映射.

实现原理如下:

Image.png

按数据的应用需求将爬虫数据分为几个类型,如视频类,其中爱奇艺,腾讯视频中的大部分数据(视频类APP中的部分数据可能属于其他类型)等并是视频类的实例.则设计两类语义文件

视频类型接口定义

爱奇艺定义

例子如下

假设有以下实例数据:

[

{

"package_name": "com.qiyi.video",

"activity_name": "org.iqiyi.video.activity.PlayerActivity",

"web_url": "http://www.iqiyi.com/v_19rr9ulqu0.html",

"web_url_md5": "43FEDEA0FC5A9C3BB446D31C2A7941A8",

"title": "天气直播间 :日照偏少河津大棚黄瓜生长缓慢",

"content": {

"writer": "天气直播间",

"tag": "社会 国语 国内",

"name": "天气直播间 :日照偏少河津大棚黄瓜生长缓慢",

"description": "关注气象、气候、环保等相关新闻资讯,设置交通天气、灾害天气解读、预警预报资讯发布等板块;在重大灾害性天气(台风、暴雨洪涝等)来临时,将打通时段进行全程直播报道,展现灾害现场、提出防御指南,配以专家分析展望未来天气走势,对灾害天气可能给各行各业带来的影响进行跟踪报道。",

"重要的额外属性1" : "xxxxx",

"test" : {

"testInner" : "hello,world"

}

},

"type": "video",

"semtype" : "IqiyiVideo",

"params": {

"id": "v_19rr9ulqu0"

},

"crawl_timestamp": "1484830716778",

"重要的额外属性2" : "yyyyy"

},

{

"package_name": "com.qiyi.video",

"activity_name": "org.iqiyi.video.activity.PlayerActivity",

"web_url": "http://www.iqiyi.com/v_19rr9ulqu0.html",

"web_url_md5": "43FEDEA0FC5A9C3BB446D31C2A7941A8",

"title": "天气直播间 :日照偏少河津大棚黄瓜生长缓慢",

"content": {

"writer": "天气直播间",

"tag": "社会 国语 国内",

"name": "天气直播间 :日照偏少河津大棚黄瓜生长缓慢",

"description": "关注气象、气候、环保等相关新闻资讯,设置交通天气、灾害天气解读、预警预报资讯发布等板块;在重大灾害性天气(台风、暴雨洪涝等)来临时,将打通时段进行全程直播报道,展现灾害现场、提出防御指南,配以专家分析展望未来天气走势,对灾害天气可能给各行各业带来的影响进行跟踪报道。",

"重要的额外属性1" : "xxxxx",

"test" : {

"testInner" : "hello,world"

}

},

"type": "video",

"semtype" : "IqiyiVideo",

"params": {

"id": "v_19rr9ulqu0"

},

"crawl_timestamp": "1484830716778",

"重要的额外属性2" : "yyyyy"

}

]

视频类接口

VideoInterface.json

{

"semInterface" : {

"document" : {

"impl" : {

"interface" : "root"// 实现接口为root表示该配置为接口文件

},

"props" : {// 属性

"id" : {// ID字段

"isArr" : false,// 是否为数组(暂时无用)

"dataType" : "String", // 数据类型

"unique" : true,// 是否唯一

"required" : true,// 是否为必有字段 false表示实现该接口的实例不是必须要含有该字段, 可以在配置文件中通过required进行选择

"desc" : "UUID"// 描述

},

"crawerTime" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "数据爬取时间戳"

},

"webUrl" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "URL"

},

"title" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "标题"

},

"params" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "params"

},

"name" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "视频名称"

},

"writer" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : false,

"desc" : "视频作者"

},

"description" : {

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : false,

"desc" : "视频描述"

},

"comments" : {

"isArr" : true,

"dataType" : "String",

"unique" : false,

"required" : false,

"desc" : "视频评论"

},

"tags" : {

"isArr" : true,

"dataType" : "String",

"unique" : false,

"required" : false,

"desc" : "视频标签"

}

}

}

}

}

爱奇艺实例

IqiyiVideo.json

{

"semImpl" : {

"document" : {

"impl" : {// 实现的接口文件

"interface" : "VideoInterface",// 填写接口文件的名称

"sameAs" : {// 与接口中定义的字段语义相同,但是路径和名称不同时,进行映射配置

"writer" : "content.writer",// 实例数据中的content.writer对应了接口文件的writer字段

"tags" : "content.tag",

"name" : "content.name",

"description" : "content.description"

},

"required" : [// 针对接口文件中required为false的字段进行选择, 这里writer,description,tags将对外提供

"writer",

"description",

"tags"

]

},

"props" : {

"重要的额外属性1" : {// 除接口文件中定义的字段之外的自定义字段

"path" : "content.重要的额外属性1",// 映射的路径

"isArr" : false,// 是否为数组

"dataType" : "String",// 数据类型

"unique" : false,// 是否唯一

"required" : true,// 是否对外提供该字段

"desc" : "重要的额外属性1"// 描述

},

"重要的额外属性2" : {

"path" : "重要的额外属性2",

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "重要的额外属性2"

},

"testInner" : {

"path" : "content.test.testInner",

"isArr" : false,

"dataType" : "String",

"unique" : false,

"required" : true,

"desc" : "重要的额外属性2"

}

}

}

}

}

最终生成的数据格式如下:

[

{

"crawerTime": "crawerTime",

"重要的额外属性1": "xxxxx",

"testInner": "hello,world",

"webUrl": "webUrl",

"name": "天气直播间 :日照偏少河津大棚黄瓜生长缓慢",

"description": "关注气象、气候、环保等相关新闻资讯,设置交通天气、灾害天气解读、预警预报资讯发布等板块;在重大灾害性天气(台风、暴雨洪涝等)来临时,将打通时段进行全程直播报道,展现灾害现场、提出防御指南,配以专家分析展望未来天气走势,对灾害天气可能给各行各业带来的影响进行跟踪报道。",

"id": "id",

"writer": "天气直播间",

"title": "title",

"params": "params",

"重要的额外属性2": "重要的额外属性2",

"tags": "社会 国语 国内"

},

{

"crawerTime": "crawerTime",

"重要的额外属性1": "xxxxx",

"testInner": "hello,world",

"webUrl": "webUrl",

"name": "天气直播间 :日照偏少河津大棚黄瓜生长缓慢",

"description": "关注气象、气候、环保等相关新闻资讯,设置交通天气、灾害天气解读、预警预报资讯发布等板块;在重大灾害性天气(台风、暴雨洪涝等)来临时,将打通时段进行全程直播报道,展现灾害现场、提出防御指南,配以专家分析展望未来天气走势,对灾害天气可能给各行各业带来的影响进行跟踪报道。",

"id": "id",

"writer": "天气直播间",

"title": "title",

"params": "params",

"重要的额外属性2": "重要的额外属性2",

"tags": "社会 国语 国内"

}

]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值