JackJson解析json的字符串格式

从前台获取了一个xml,然后解析xml的属性的时候,其属性值是一个json的String类型.所以在解析json的时候,给出的问题是:

1,不管什么对象类型,根据json的构造,根据的key值,去取对应的value值;

2,将操作的json的对象,定义为对应的java对象,然后将json转换为对应的java对象.取java对象的属性值,即是处理的结果值.

两种不同的思路,性能和可维护性上面,个人感觉还是后者相对方便一点..贴下代码,看看...

第一种方式::

其json的直观视觉是:

package azkabanproject;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class ParseJsonString {

    public static void main(String[] args) {

        String jsonString = "{\n" +
                "          \"sources\":[\n" +
                "                {\n" +
                "                    \"baseList\":{\n" +
                "                        \"tableName\":\"trs_action_dzwl_zm1\",\n" +
                "                        \"tableAlias\":\"50\",\n" +
                "                        \"tableSize\":\"10000\",\n" +
                "                        \"tableFields\":[\n" +
                "                            {\n" +
                "                                \"field\":\"name1\",\n" +
                "                                \"fieldDesc\":\"名称1\",\n" +
                "                                \"fieldInputtype\":\"0\"\n" +
                "                            },\n" +
                "                            {\n" +
                "                                \"field\":\"name2\",\n" +
                "                                \"fieldDesc\":\"名称2\",\n" +
                "                                \"fieldInputtype\":\"1\"\n" +
                "                            }\n" +
                "                        ]\n" +
                "                    },\n" +
                "                    \"infoList\":[\n" +
                "                        {\n" +
                "                            \"field\":\"start_time\",\n" +
                "                            \"fieldContent\":\"20170724000000到20170724101010\",\n" +
                "                            \"fieldDesc\":\"创建时间\"\n" +
                "                        },\n" +
                "                        {\n" +
                "                            \"field\":\"site_address\",\n" +
                "                            \"fieldContent\":\"南苑大厦\",\n" +
                "                            \"fieldDesc\":\"详细地址\"\n" +
                "                        },\n" +
                "                        {\n" +
                "                            \"field\":\"name\",\n" +
                "                            \"fieldContent\":\"自定义名称1\",\n" +
                "                            \"fieldDesc\":\"名称\"\n" +
                "                        }\n" +
                "                    ]\n" +
                "                },\n" +
                "                {\n" +
                "                    \"baseList\":{\n" +
                "                        \"tableName\":\"trs_action_dzwl_zm1\",\n" +
                "                        \"tableAlias\":\"50\",\n" +
                "                        \"tableSize\":\"10000\",\n" +
                "                        \"tableFields\":[\n" +
                "                            {\n" +
                "                                \"field\":\"name1\",\n" +
                "                                \"fieldDesc\":\"名称1\",\n" +
                "                                \"fieldInputtype\":\"0\"\n" +
                "                            },\n" +
                "                            {\n" +
                "                                \"field\":\"name2\",\n" +
                "                                \"fieldDesc\":\"名称2\",\n" +
                "                                \"fieldInputtype\":\"1\"\n" +
                "                            }\n" +
                "                        ]\n" +
                "                    },\n" +
                "                    \"infoList\":[\n" +
                "                        {\n" +
                "                            \"field\":\"start_time\",\n" +
                "                            \"fieldContent\":\"20170724000000到20170724101010\",\n" +
                "                            \"fieldDesc\":\"创建时间\"\n" +
                "                        },\n" +
                "                        {\n" +
                "                            \"field\":\"site_address\",\n" +
                "                            \"fieldContent\":\"南苑大厦\",\n" +
                "                            \"fieldDesc\":\"详细地址\"\n" +
                "                        },\n" +
                "                        {\n" +
                "                            \"field\":\"name\",\n" +
                "                            \"fieldContent\":\"自定义名称1\",\n" +
                "                            \"fieldDesc\":\"名称\"\n" +
                "                        }\n" +
                "                    ]\n" +
                "                }\n" +
                "            ],\n" +
                "        \"outFields\":[\n" +
                "                {\n" +
                "                    \"field\":\"name1\",\n" +
                "                    \"fieldDesc\":\"名称1\",\n" +
                "                    \"fieldInputtype\":\"0\"\n" +
                "                },\n" +
                "                {\n" +
                "                    \"field\":\"name2\",\n" +
                "                    \"fieldDesc\":\"名称2\",\n" +
                "                    \"fieldInputtype\":\"1\"\n" +
                "                }\n" +
                "             ]\n" +
                " }";

        parse(jsonString);
    }
    public static void parse(String jsonString) {
      //  String jsonString = "";
        Gson json = new Gson();
        JsonObject jsb = json.fromJson(jsonString, JsonObject.class);
        JsonArray sources = jsb.getAsJsonArray("sources");  //数组
        for (JsonElement ja : sources) {
            JsonElement jba = ja.getAsJsonObject().get("baseList");
            String tableName = jba.getAsJsonObject().get("tableName").getAsString();
            String tableAlias = jba.getAsJsonObject().get("tableAlias").getAsString();
            String tableSize = jba.getAsJsonObject().get("tableSize").getAsString();
            System.out.println(tableName+"___"+tableAlias+"___"+tableSize);

            JsonArray tableFields = jba.getAsJsonObject().get("tableFields").getAsJsonArray();
            for (JsonElement tableField : tableFields) {
                String field = tableField.getAsJsonObject().get("field").getAsString();
                String fieldDesc = tableField.getAsJsonObject().get("fieldDesc").getAsString();
                String fieldInputtype = tableField.getAsJsonObject().get("fieldInputtype").getAsString();
                System.out.println(field+"___"+fieldDesc+"___"+fieldInputtype);
            }

            JsonArray infoList = ja.getAsJsonObject().get("infoList").getAsJsonArray();
            for (JsonElement info : infoList) {
                String field = info.getAsJsonObject().get("field").getAsString();
                String fieldContent = info.getAsJsonObject().get("fieldContent").getAsString();
                String fieldDesc = info.getAsJsonObject().get("fieldDesc").getAsString();
                System.out.println(field+"___"+fieldContent+"___"+fieldDesc);
            }

        }

        JsonArray outFields = jsb.getAsJsonArray("outFields");
        for (JsonElement outField : outFields) {

           String field= outField.getAsJsonObject().get("field").getAsString();
           String fieldDesc=  outField.getAsJsonObject().get("fieldDesc").getAsString();
           String fieldInputtype=outField.getAsJsonObject().get("fieldInputtype").getAsString();
            System.out.println(field+"___"+fieldDesc+"___"+fieldInputtype);
        }
    }
}

以上是第一种方式,使用的是Gson,然后根据json结构直接操作json数据类型.

第二种是:构建对象

对象JsonValue

package com.trs.idap.web.rest.util;

import java.io.Serializable;
import java.util.Arrays;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:
 * @author Young
 * @create 2018-07-25 17:44
 */
public class JsonValue implements Serializable{
    private BaseInfo[] sources;
    private OutFields[] outFields;

    @Override
    public String toString() {
        return "JsonValue{" +
            "sources=" + Arrays.toString(sources) +
            ", outFields=" + Arrays.toString(outFields) +
            '}';
    }

    public OutFields[] getOutFields() {
        return outFields;
    }

    public void setOutFields(OutFields[] outFields) {
        this.outFields = outFields;
    }

    public BaseInfo[] getSources() {
        return sources;
    }

    public void setSources(BaseInfo[] sources) {
        this.sources = sources;
    }

}

对象BaseInfo

package com.trs.idap.web.rest.util;

import java.io.Serializable;
import java.util.Arrays;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:
 *
 * @author Young
 * @create 2018-07-25 17:47
 */
public class BaseInfo implements Serializable{
    private BaseList baseList;
    private InfoList[] infoList;
    
    //TODO getter/setter/toString
}

对象BaseList

package com.trs.idap.web.rest.util;

import java.io.Serializable;
import java.util.Arrays;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:
 *
 * @author Young
 * @create 2018-07-25 17:59
 */
public class BaseList implements Serializable{
    private String tableName;
    private String tableNameDesc;
    private String tableAlias;
    private String tableSize;
    private TableFields[]  tableFields;

   //TODO setter getter toString
}

对象 TableFields

package com.trs.idap.web.rest.util;

import java.io.Serializable;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:
 *
 * @author Young
 * @create 2018-07-25 18:02
 */
public class TableFields implements Serializable{
    private String field;
    private String fieldDesc;
    private String fieldInputtype;

 //TODO setter getter toString
}

对象InfoList

package com.trs.idap.web.rest.util;

import java.io.Serializable;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:
 *
 * @author Young
 * @create 2018-07-25 18:04
 */
public class InfoList implements Serializable {
    private String field;
    private String fieldContent;
    private String fieldDesc;

   //TODO getter setter toString
}

对象OutFields

package com.trs.idap.web.rest.util;

import java.io.Serializable;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:
 *
 * @author Young
 * @create 2018-07-25 17:55
 */
public class OutFields implements Serializable {
    private String field;
    private String fieldDesc;
    private String fieldInputtype;

  //TODO getter setter toString
}

由上图可见.....该json总共建立了6个java对象.但是对于后期的维护性还是比较方便的....

使用方法解析时:

package com.trs.idap.web.rest.util;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

/**
 * Created by Administrator on 2018/7/25.
 * 描述:解析json格式
 *
 * @author Young
 * @create 2018-07-25 17:07
 */
public class JsonUtils {
    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        JsonValue jsonValue = mapper.readValue(jsonString, JsonValue.class);

        OutFields[] outFields = jsonValue.getOutFields();
        //字段值,字段   ===>columnList columnListComment
        StringBuffer sbFieldList = new StringBuffer();
        StringBuffer sbFieldListComment = new StringBuffer();
        Boolean flag = false;
        for (OutFields outField : outFields) {
            System.err.println(outField.getField());
            System.out.println(outField.getFieldDesc());
            System.out.println(outField.getFieldInputtype());
            if (!flag) {
                sbFieldList.append(outField.getField());
                sbFieldListComment.append(outField.getFieldDesc());
                flag = true;
            } else {
                sbFieldList.append(",").append(outField.getField());
                sbFieldListComment.append(",").append(outField.getFieldDesc());
            }
        }
        System.out.println("字段列为:======>" + sbFieldList.toString() + ",   字段名为===:" + sbFieldListComment);
        BaseInfo[] sources = jsonValue.getSources();
        for (BaseInfo baseInfo : sources) {
            BaseList baseList = baseInfo.getBaseList();
            System.out.println(baseList.getTableAlias());
            System.out.println(baseList.getTableFields());
            System.out.println(baseList.getTableName());
            System.out.println(baseList.getTableNameDesc());
            System.out.println(baseList.getTableSize());
            InfoList[] infoList = baseInfo.getInfoList();
            for (InfoList info : infoList) {
                System.out.println(info.getField());
                System.out.println(info.getFieldContent());
                System.out.println(info.getFieldDesc());
            }
        }
    }

  

}

真正使用的就是获取到指定的类型

        ObjectMapper mapper = new ObjectMapper();
        JsonValue jsonValue = mapper.readValue(jsonString, JsonValue.class);

构建起来还很方便的..只要将对象关系处理好.

猜你喜欢

转载自blog.csdn.net/YoungLee16/article/details/81219738