JSON解析

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对象
面对这种复杂的字符串 我们要一层一层的分析,运用在线解析工具,清楚其结构,解析起来就容易了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值