从前台获取了一个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;@Overridepublic 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 columnListCommentStringBuffer 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);

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

JackJson解析json的字符串格式相关推荐

  1. struts2操作json成字符串格式错误被转义及其前台访问json对象的方法

    这个问题确实纠结了我几天,是在是烦.网上也是参考了好几位大师的说法.都是不了了之. 这里记下这个问题,以备以后的参考. 我在struts2后台返回的是这样的json字符串: "[{\&quo ...

  2. 安卓大json文件解析_安卓解析 json 4种格式 全解析

    1  简单的一个  { ,,,,} 2  里面有数组 { , [{,,},{,,}],} 3 直接一个数组 4 数组里有数组 5 其他情况? 没有吧,除非json格式不规范 主代码: package ...

  3. js解析json数据格式及格式转换

    JSON数据 [javascript Object Notation]JavaScript对象表示法 是一种轻量级的数据交换格式 json的数据结构 ● 一种是"名称/值"的组合 ...

  4. Go使用simple-json解析json数组字符串:以Harbor获取镜像tag为例

    package mainimport ("encoding/json""fmt""io/ioutil""net/http" ...

  5. android 解析json 日期格式,如何将JSON格式的日期字符串解析为日期格式

    我正在做的是,使用ajax从数据库中获取数据并在html文本框中显示它以进行更新.下面是我成功获取数据的Web方法代码. [WebMethod] public static List getEmplo ...

  6. json string 格式_Retrofit同时解析JSON和XML数据格式

    前言 Android开发中,我们会经常遇到前端需要解析两种数据格式(json和xml),比如自己服务器返回的是json格式的数据,我们做微信登录的时候,微信返回的格式又是xml格式的.我们可以通过自己 ...

  7. Go语言进阶,结构体与json字符串格式的互相转换

    对于结构体大家都很熟悉,是一种自定义类型,可以将不同类型的同属于这个类的属性(成员变量)集合在一起,换句话说这些成员变量属于键值对,那么这种也就是常见的json格式,我们来看下如何将结构体转成json ...

  8. 学会Hive解析Json数组

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析.接下来就聊聊Hive中是如何 ...

  9. Hive解析Json数组超全讲解

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析.接下来就聊聊Hive中是如何 ...

最新文章

  1. python绘制灰度图片直方图-python+opencv 灰度直方图及其二值化
  2. poj3076(16*16数独)
  3. 牛客网_PAT乙级_1022挖掘机技术哪家强(20)【class vector sort排序、删除重复元素】
  4. theano中的Rop和Lop的详细解释
  5. chrome自动提交文件_收集文档及提交名单统计
  6. [Codeforces677B]Vanya and Food Processor(模拟,数学)
  7. SpringBoot整合Shiro实现登录认证授权操作
  8. C++ String16与const char*及char*与vector相互转换
  9. VMware Tools 支持 Windows 2000、Windows XP 和 Windows Server 2003 (81466)
  10. 人工智能之自然语言处理技术总结与展望
  11. 读 Irving M. Copi 之《逻辑学导论》
  12. 数据库分页技术的实现
  13. POJ-2524 Ubiquitous Religions
  14. 现货黄金赚吗:黄金实战技巧
  15. mac更换java版本_Mac上更换JDK版本方法
  16. 论文:Detecting and Correcting for Label Shift with Black Box Predictors(BBSE)
  17. iReport 相关资料汇总
  18. HGAME 2022 WEB
  19. trafficserver安装配置
  20. EAN-13 条码生成

热门文章

  1. 上期技术CTP_最新6.6.1T1_P1版_API_COM封装使用指南及DELPHI2010_python3.60_VB.NET_C#_VS2015_C++MFC_WIN32示例代码程序
  2. Android去电流程
  3. 高铁招计算机专业吗,高铁乘务学校招生:对计算机应用技术专业的思考
  4. STM32F429通用定时器(TIM)
  5. Python股票数据处理的一些代码细节
  6. 史上最强c++代码——“boost::asio”
  7. osg 节点渲染 重新渲染模型 (已解决)
  8. 人脸生成 Look across Elapse: Disentangled Representation Learning and Photorealistic Cross-Age Face
  9. asp.net core 多端口监听日志服务
  10. 卡尔曼滤波器 误差协方差矩阵