碰到json数据、里面格式众多、list+string[]+等等。具体json参数如下:

eg:以下为接口参数:

"responseData":{
"brandCode": "10000002",
"brandName": "健康卡",
"channelId": 20001,
"channelIdOldPc": "wap-fmall-yztapp",
"channelIdOldWap": "wap-fmall-yztapp",
"createBy": "creator",
"createDate": "2016-04-26 10:30:40.000830",

"ext": {
"main_product_icon_url": ["http://www.google.com0",
"http://www.google.com1",
"http://www.google.com2"],
"product_tag": "产品标签",
"product_feature": "product_feature",

"faq": [{
"answer": "您好!客服156,具体的支付方式需要以您的结算页面显示为准。 感谢您对京东的支持!祝您购物愉快0",
"questionType": "type0",
"question": "可以12期免息吗?0"
},
{

"answer": "您好!客服156,具体的支付方式需要以您的结算页面显示为准。 感谢您对京东的支持!祝您购物愉快4",
"questionType": "type4",
"question": "可以12期免息吗?4"
}],

"life_rule_mind": "一次一张",
"life_except_date": "20150507,20150607,20150707"
},

"updateDate": "2016-04-26 10:30:40.000830",
"vendorCode": "10000000",
"vendorName": "顺德商户",

"graphic_insurance": [{
"url": "1",
"name": "1"
}],

}

上述为接口返回的json数据。格式太多、只罗列出这些。首先一开始想到用jsonObject。后来解析着解析着各种莫名的错误。字段类型不匹配啦,日期格式错误啦等等等。搞的头大的一匹~后来百度了一把,发现了谷歌的Gson(不过需要个jar包、自己找吧。太忙了这会儿);

废话少说,上代码:

字段+格式太多了、根本不可能一个个的解析(一百七十多个、表问我为毛这么多。我也想知道为什么)。由此开启了Gson之路

//action  

方法开始{

JSONObject jsonObject = EsgClientUtil.sendProductDto(ESG_URI_INFO, baseProductDto);  //ESG_URI_INFO;自定义接口路径;
String responseCode = jsonObject.getString("responseCode");
String responseMessage = jsonObject.getString("responseMessage");  //responseCode   responseMessage 此处是返回调用接口的返回码和是否成功信息
if (jsonObject == null || !"000000".equalsIgnoreCase(responseCode)) {// 调用失败
serviceResponse.setSuccess(false);
serviceResponse.setResponseMsg("调用接口失败。" + responseMessage);
return serviceResponse;
}
serviceResponse.setSuccess(true);
String reponseStr = "";

if(jsonObject.has("responseData")){  //接口是否成功返回数据

JSONObject responseData = jsonObject.getJSONObject("responseData");
reponseStr = jsonObject.getString("responseData");
//使用Gson进行json解析 (多个json解析+list数组等)  //解析开始
Gson gson = new Gson();
BaseProductDto responseBaseProductDto = gson.fromJson(reponseStr, BaseProductDto.class);
JSONObject extJson = responseData.getJSONObject("ext");  //对应上面eg数据里的ext;
//获取ext扩展信息里的json格式数据,dto中用list<map>接收。并到页面遍历出 子选项
String ext = extJson.toString();
if(!"".equals(ext) && ext != "" && !"[]".equals(ext)){
ScalableMessageDto s = gson.fromJson(ext, ScalableMessageDto.class);  //对应实体类;进行匹配解析
responseBaseProductDto.setScalableMessageDto(s);

以上就是数据的初步解析;如果里面有更多json嵌套等:继续往下解析就是了:

eg(举例):

String productSkuStr = responseData.getString("productSku");  //如果又来一层。接收key:productSku。然后解析就是了
if(!"".equals(productSkuStr) && productSkuStr !="" && !"[]".equals(productSkuStr)){
JSONObject productSku = JSONArray.fromString(productSkuStr).getJSONObject(0);

String sku = productSku.getString("sku");  //productSku  里面的key:sku
if(!"".equals(sku) && sku != "" && !"[]".equals(sku)){
ProductSkuDto productSkuDto = gson.fromJson(sku, ProductSkuDto.class);  //实体类关联的productSkuDto
responseBaseProductDto.setProductSkuDto(productSkuDto);
}

}

//实体类

public class BaseProductDto implements Serializable{

/**
* 扩展信息、引入关联实体类
*/
private ScalableMessageDto scalableMessageDto; 

/**
* skuDto信息
*/
private ProductSkuDto productSkuDto;

//....setter/getter

}

那么问题来了。方法到这差不多结束了。字段呢?繁杂且冗余的字段类型怎么定义呢。接着走~

//对应BaseProductDto 引入的实体类

public class ScalableMessageDto {
private static final Log LOG = LogFactory.getLog(ScalableMessageDto.class);
//公共信息模块
private List<String>  publish_area;   //开发文档为array格式、即允许逗号分隔多个存储等。eg:1003,1004,1008

private String deal_agreement; 
private String product_slogan; 
private String product_introduce; 
private String product_feature;
private String product_consult;

private List<Map>faq;

// List<Map>   文档为json格式。eg:{"result":[{"questionType":"","qa":[{"question":"","answer":""},{"question":"","answer":""}]},

//{"questionType":"","qa":[{"question":"","answer":""},{"question":"","answer":""}]}]}。   即多个文本组合、一同存入;
private String faq_url;
private List<String> main_product_icon_url;
private List<String> list_product_icon_url; 
private List<String> product_tag;

private List<Map> graphic_insurance; 
private List<Map> insurance_respon;

//。。。。setter、getter

}

以上list<map>类型的优势是什么呢;只是在实体类中格式化后。页面就省事了。只需要<c:foreach>遍历即可获取所有json数据;

eg:

jsp、、faq字段为例

<tbody id="questionType" name ="questionType">
<c:forEach var="faq" items="${baseProductDto.scalableMessageDto.faq}" varStatus="faqSize">
<tr>
<td><h4>常见问题<c:out value="${faqSize.index+1}"></c:out></h4></td>
<td class="in w400">
<div class="qa" name="qa"><br/>
<span>问题<input type="text" class="w400 ml15 js_provisionName" disabled="disabled" name="question" value="<c:out value="${faq.question}"/>"/><b class="question"></b></span><br/><br/>
<span>答案<input type="text" class="w400 ml15 js_downloadUrl" disabled="disabled" name="answer" value="<c:out value="${faq.answer}"/>"/><b class="answer"></b></span><br/><br/>
<span><div style="width:800px;height:1px;margin:0px auto;padding:0px;background-color:#D5D5D5;overflow:hidden;"></div>
</span>
</div>
</td>
</tr>
</c:forEach>
</tbody>

//ps:以上为本人工作时遇到并已解决的问题。拿出来与大家共享。[/拜谢]、

如有转发请注明出处。尊重原创~从这里开始

Gson解析json繁杂数据的更多相关文章

  1. $Java-json系列(一):用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  2. 用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  3. Gson解析Json格式数据

    //数据定义:=========================================== class User{ String name; String password; String ...

  4. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  5. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Google Gson解析Json数据应用实例

    转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gso ...

  7. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  8. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  9. JAVA使用Gson解析json数据,实例

    封装类Attribute: public class Attribute { private int id; private String name; private int age; public ...

随机推荐

  1. SQL Server判断对象是否存在 (if exists (select * from sysobjects )(转)

    1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = ’数据库名’)    drop database [数据库名] ...

  2. 【JavaScript】

    右键禁用.防止文字选中 .返回选中的文本 JavaScript 原理 Javascript高性能动画与页面渲染 前端不为人知的一面--前端冷知识集锦 屏幕外去计算值,position:absolute ...

  3. 【最短路】Vijos P1022Victoria的舞会2

    题目链接: https://vijos.org/p/1022 题目大意: 给一张N个点的有向图,求有几块强连通分量.(N<=200) 题目思路: [动态规划] n比较小,可以用floyd暴力把每 ...

  4. H - Parity game-poj1733(需要离散化)

    题意:给一个序列这个序列都是由0和1组成,现在随意拿出来一个序列,然后说出他的和是奇数还是偶数,因为有可能存在假话,让你判断前多少条没有假话,也就是查找第一个假话的位置-1 ///////////// ...

  5. MySQL用命令行复制表的方法

    mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 ; 或 CREATE TABLE 新表 LIKE 旧表 ; 注意上面两种方式,前一种方式是不会复制时的主键类型和自增方式是 ...

  6. throw与throw的区别

    Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...

  7. 如何调试delphi的Access violation at address错误

    1.什么是 MAP 文件?简单地讲,MAP 文件是程序的全局符号.源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方.任何时候使用,不需要有额外的程序进行支持. 2.DELPHI下生成MAP文 ...

  8. java自定义对话框

    package com.matp.view; import java.awt.FlowLayout; public class SimpleDialog extends JDialog impleme ...

  9. 玩转Web之servlet(三)---一张图看懂B/S架构

    学WEB, 首先 要明确B/S架构,本文将简单说一下小编的愚见,若有不当,欢迎大家指正. 首先,什么是B/S架构?B/S是Broweser/Server的缩写,即浏览器/server模式,简单说就是c ...

  10. TCP/IP之分层

    网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能.一个协议族,比方T C P / I P,是一组不同层次上的多个协议的组合.T C P / I P通常被觉得是一个四层协议系统. 1.每层的 ...