简介
今天早上突然有个高中同学小勇问我,他从事android的开发,他问了我一个问题,他说现在需要做一个json到对象的映射,java开发组给他的就是一个json的String,但是没有给他实体的转化对象。当他给我json的字符串的时候,我吓一跳,长度很长,如果手动把这个json转化成一个对象,复制粘贴的成本太高,他问我有没有快捷的方法。
转化工具 jsonschema2pojo
因为考虑到json数据也就是规则化的数据格式。很明显只要json数据符合格式要求,那么这个json必将可以转化为一个实体类,java想转化这个json,我立即想到了会不会就是有工具这样做的。
果不其然。
Generate Java types from JSON or JSON Schema and annotates those types for data-binding with Jackson, Gson, etc
事例展示
json数据:(数据是一个豆瓣爬虫的配置文件)
{
"startUrl": "https://movie.douban.com/top250?start=[0-250:25]",
"selectors": [
{
"parentSelectors": [
"_root"
],
"type": "SelectorElement",
"multiple": true,
"id": "eles",
"selector": ".info",
"delay": ""
},
{
"parentSelectors": [
"eles"
],
"type": "SelectorText",
"multiple": false,
"id": "title",
"selector": "span.title",
"regex": "",
"delay": ""
},
{
"parentSelectors": [
"eles"
],
"type": "SelectorText",
"multiple": false,
"id": "score",
"selector": "span.rating_num",
"regex": "",
"delay": ""
},
{
"parentSelectors": [
"eles"
],
"type": "SelectorText",
"multiple": false,
"id": "remark",
"selector": "div.star>span:eq(3)",
"regex": "",
"delay": ""
},
{
"parentSelectors": [
"eles"
],
"type": "SelectorText",
"multiple": false,
"id": "description",
"selector": ".bd>p:eq(0)",
"regex": "",
"delay": ""
},
{
"parentSelectors": [
"eles"
],
"type": "SelectorText",
"multiple": false,
"id": "theme",
"selector": "span.inq",
"regex": "",
"delay": ""
}
],
"_id": "douban_top250"
}
转化后的格式:
-----------------------------------com.example.Example.java-----------------------------------
package com.example;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Example {
private String startUrl;
private List<Selector> selectors = null;
private String id;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public String getStartUrl() {
return startUrl;
}
public void setStartUrl(String startUrl) {
this.startUrl = startUrl;
}
public List<Selector> getSelectors() {
return selectors;
}
public void setSelectors(List<Selector> selectors) {
this.selectors = selectors;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
-----------------------------------com.example.Selector.java-----------------------------------
package com.example;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Selector {
private List<String> parentSelectors = null;
private String type;
private Boolean multiple;
private String id;
private String selector;
private String delay;
private String regex;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public List<String> getParentSelectors() {
return parentSelectors;
}
public void setParentSelectors(List<String> parentSelectors) {
this.parentSelectors = parentSelectors;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Boolean getMultiple() {
return multiple;
}
public void setMultiple(Boolean multiple) {
this.multiple = multiple;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSelector() {
return selector;
}
public void setSelector(String selector) {
this.selector = selector;
}
public String getDelay() {
return delay;
}
public void setDelay(String delay) {
this.delay = delay;
}
public String getRegex() {
return regex;
}
public void setRegex(String regex) {
this.regex = regex;
}
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
右侧的菜单项选择: