FastJson解析
解析简单的json字符串就不做介绍了,接下来直接上硬货!
下面解析相对复杂的json
[
{
"id": "user_list",
"key": "id",
"tableName": "用户列表",
"className": "cn.dmego.domain.User",
"column": [
{
"key": "rowIndex",
"header": "序号",
"width": "50",
"allowSort": "false"
},
{
"key": "id",
"header": "id",
"hidden": "true"
},
{
"key": "name",
"header": "姓名",
"width": "100",
"allowSort": "true"
}
]
},
{
"id": "role_list",
"key": "id",
"tableName": "角色列表",
"className": "cn.dmego.domain.Role",
"column": [
{
"key": "rowIndex",
"header": "序号",
"width": "50",
"allowSort": "false"
},
{
"key": "id",
"header": "id",
"hidden": "true"
},
{
"key": "name",
"header": "名称",
"width": "100",
"allowSort": "true"
}
]
}
]
解析复杂json字符串也可以使用在线格式化Json工具例如:json.cn
要想解析这种复杂的字符串,首先得先定义好与之相符的Java POJO 对象,经过观察,我们发现,这个是一个json对象数组,每一个对象里包含了许多属性,其中还有一个属性的类型也是对象数组。所有,我们从里到外,先定义最里面的对象:
public class Column {
private String key;
private String header;
private String width;
private String allowSort;
private String hidden;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getWidth() {
return width;
}
public void setWidth(String width) {
this.width = width;
}
public String getAllowSort() {
return allowSort;
}
public void setAllowSort(String allowSort) {
this.allowSort = allowSort;
}
public String getHidden() {
return hidden;
}
public void setHidden(String hidden) {
this.hidden = hidden;
}
//省略toString方法
}
然后定义最外面的对象,实体类命名为data
public class Data {
private String id;
private String key;
private String tableName;
private String className;
private List<Column> column;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public List<Column> getColumn() {
return column;
}
public void setColumn(List<Column> column) {
this.column = column;
}
//省略toString方法
}
最后附上JsonTest测试类
public class JsonTest {
public static void main(String[] args) {
List<Data> data = JSON.parseArray("[\n" +
" {\n" +
" \"id\": \"user_list\",\n" +
" \"key\": \"id\",\n" +
" \"tableName\": \"用户列表\",\n" +
" \"className\": \"cn.dmego.domain.User\",\n" +
" \"column\": [\n" +
" {\n" +
" \"key\": \"rowIndex\",\n" +
" \"header\": \"序号\",\n" +
" \"width\": \"50\",\n" +
" \"allowSort\": \"false\"\n" +
" },\n" +
" {\n" +
" \"key\": \"id\",\n" +
" \"header\": \"id\",\n" +
" \"hidden\": \"true\"\n" +
" },\n" +
" {\n" +
" \"key\": \"name\",\n" +
" \"header\": \"姓名\",\n" +
" \"width\": \"100\",\n" +
" \"allowSort\": \"true\"\n" +
" }\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"id\": \"role_list\",\n" +
" \"key\": \"id\",\n" +
" \"tableName\": \"角色列表\",\n" +
" \"className\": \"cn.dmego.domain.Role\",\n" +
" \"column\": [\n" +
" {\n" +
" \"key\": \"rowIndex\",\n" +
" \"header\": \"序号\",\n" +
" \"width\": \"50\",\n" +
" \"allowSort\": \"false\"\n" +
" },\n" +
" {\n" +
" \"key\": \"id\",\n" +
" \"header\": \"id\",\n" +
" \"hidden\": \"true\"\n" +
" },\n" +
" {\n" +
" \"key\": \"name\",\n" +
" \"header\": \"名称\",\n" +
" \"width\": \"100\",\n" +
" \"allowSort\": \"true\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"]", Data.class);
System.out.println(data);
}
}
然后我们来看输出结果
[
Data{id='user_list', key='id', tableName='用户列表', className='cn.dmego.domain.User',
column=[
Column{key='rowIndex', header='序号', width='50', allowSort='false', hidden='null'},
Column{key='id', header='id', width='null', allowSort='null', hidden='true'},
Column{key='name', header='姓名', width='100', allowSort='true', hidden='null'}]},
Data{id='role_list', key='id', tableName='角色列表', className='cn.dmego.domain.Role',
column=[
Column{key='rowIndex', header='序号', width='50', allowSort='false', hidden='null'},
Column{key='id', header='id', width='null', allowSort='null', hidden='true'},
Column{key='name', header='名称', width='100', allowSort='true', hidden='null'}]}]
我们把复杂的JSON字符串成功转化成Java对象
面对这种复杂的字符串 我们要一层一层的分析,运用在线解析工具,清楚其结构,解析起来就容易了。