目的:将json转成实体bean,并解析出多层次属性信息
此为json串:
String json = "
{"jsonValue":[{"addTime":1431078503000,"attriDetail":"[{\"group\":11202,\"name\":\"基本参数\",\"sort\":1,\"attribute\":[{\"id\":200511,\"name\":\"项目区域要求\",\"unit\":\"\",\"typeid\":2,\"is_full\":true,\"sort\":1,\"detail\":[{\"id\":13004689,\"detail\":\"北京\",\"sort\":1,\"checked\":\"\"},{\"id\":13004690,\"detail\":\"天津\",\"sort\":2,\"checked\":\"\"},{\"id\":13004691,\"detail\":\"河北\",\"sort\":3,\"checked\":\"\"},{\"id\":13004692,\"detail\":\"山西\",\"sort\":4,\"checked\":\"\"},{\"id\":13004693,\"detail\":\"内蒙古\",\"sort\":5,\"checked\":\"checked\"},{\"id\":13004694,\"detail\":\"辽宁\",\"sort\":6,\"checked\":\"\"},{\"id\":13004695,\"detail\":\"吉林\",\"sort\":7,\"checked\":\"\"},{\"id\":13004696,\"detail\":\"黑龙江\",\"sort\":8,\"checked\":\"\"},{\"id\":13004697,\"detail\":\"江苏\",\"sort\":9,\"checked\":\"\"},{\"id\":13004698,\"detail\":\"上海\",\"sort\":10,\"checked\":\"\"},{\"id\":13004699,\"detail\":\"浙江\",\"sort\":11,\"checked\":\"\"},{\"id\":13004700,\"detail\":\"安徽\",\"sort\":12,\"checked\":\"checked\"},{\"id\":13004701,\"detail\":\"福建\",\"sort\":13,\"checked\":\"\"},{\"id\":13004702,\"detail\":\"江西\",\"sort\":14,\"checked\":\"\"},{\"id\":13004703,\"detail\":\"山东\",\"sort\":15,\"checked\":\"\"},{\"id\":13004704,\"detail\":\"河南\",\"sort\":16,\"checked\":\"\"},{\"id\":13004705,\"detail\":\"湖北\",\"sort\":17,\"checked\":\"\"},{\"id\":13004706,\"detail\":\"湖南\",\"sort\":18,\"checked\":\"checked\"},{\"id\":13004707,\"detail\":\"广东\",\"sort\":19,\"checked\":\"checked\"},{\"id\":13004708,\"detail\":\"广西\",\"sort\":20,\"checked\":\"\"},{\"id\":13004709,\"detail\":\"海南\",\"sort\":21,\"checked\":\"\"},{\"id\":13004710,\"detail\":\"重庆\",\"sort\":22,\"checked\":\"\"},{\"id\":13004711,\"detail\":\"四川\",\"sort\":23,\"checked\":\"\"},{\"id\":13004712,\"detail\":\"贵州\",\"sort\":24,\"checked\":\"\"},{\"id\":13004713,\"detail\":\"云南\",\"sort\":25,\"checked\":\"\"},{\"id\":13004714,\"detail\":\"西藏\",\"sort\":26,\"checked\":\"\"},{\"id\":13004715,\"detail\":\"陕西\",\"sort\":27,\"checked\":\"\"},{\"id\":13004716,\"detail\":\"甘肃\",\"sort\":28,\"checked\":\"\"},{\"id\":13004717,\"detail\":\"青海\",\"sort\":29,\"checked\":\"\"},{\"id\":13004718,\"detail\":\"宁夏\",\"sort\":30,\"checked\":\"\"},{\"id\":13004719,\"detail\":\"新疆\",\"sort\":31,\"checked\":\"\"},{\"id\":13004720,\"detail\":\"香港\",\"sort\":32,\"checked\":\"checked\"},{\"id\":13004721,\"detail\":\"澳门\",\"sort\":33,\"checked\":\"\"},{\"id\":13004722,\"detail\":\"台湾\",\"sort\":34,\"checked\":\"\"}],\"userdata\":\"\"},{\"id\":200512,\"name\":\"加盟金额 \",\"unit\":\"\",\"typeid\":1,\"is_full\":true,\"sort\":2,\"detail\":[{\"id\":13004723,\"detail\":\"1万以下\",\"sort\":1,\"checked\":\"\"},{\"id\":13004724,\"detail\":\"1—3万\",\"sort\":2,\"checked\":\"\"},{\"id\":13004725,\"detail\":\"3—10万\",\"sort\":3,\"checked\":\"checked\"},{\"id\":13004726,\"detail\":\"10—30万\",\"sort\":4,\"checked\":\"\"},{\"id\":13004727,\"detail\":\"30万以上\",\"sort\":5,\"checked\":\"\"}],\"userdata\":\"\"},{\"id\":0,\"name\":\"测试1\",\"unit\":\"\",\"typeid\":0,\"is_full\":false,\"sort\":2,\"detail\":[],\"userdata\":\"测试2\"},{\"id\":0,\"name\":\"你好\",\"unit\":\"\",\"typeid\":0,\"is_full\":false,\"sort\":2,\"detail\":[],\"userdata\":\"哈哈\"},{\"id\":0,\"name\":\"公牛\",\"unit\":\"\",\"typeid\":0,\"is_full\":false,\"sort\":2,\"detail\":[],\"userdata\":\"骑士\"}]}]","categoryCode":"139102103","id":73761923,"memberId":41287423,"name":"asdasdasdasd","pic":"[43249444]","siteId":1,"summary":"asdasd"}],"status":1} " ;
解决方法1:
一:首先 建立 4 个实体类对象(因为json串中包含有四个实体类信息)
1.
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author z**
*
*/
public class Demo1 implements Serializable{
private static final long serialVersionUID = 1L;
private Long id;
private int siteId;
private String memberId;
private String categoryCode;
private String addTime;
private String pic;
private String summary;
private String name;
private String attriDetail;
private List<Demo2> attriDetails;
.....setter and getter
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((attriDetail == null) ? 0 : attriDetail.hashCode());
result = prime * result
+ ((categoryCode == null) ? 0 : categoryCode.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result
+ ((memberId == null) ? 0 : memberId.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((pic == null) ? 0 : pic.hashCode());
result = prime * result + siteId;
result = prime * result + ((summary == null) ? 0 : summary.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Information other = (Information) obj;
if (attriDetail == null) {
if (other.attriDetail != null)
return false;
} else if (!attriDetail.equals(other.attriDetail))
return false;
if (categoryCode == null) {
if (other.categoryCode != null)
return false;
} else if (!categoryCode.equals(other.categoryCode))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (memberId == null) {
if (other.memberId != null)
return false;
} else if (!memberId.equals(other.memberId))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (pic == null) {
if (other.pic != null)
return false;
} else if (!pic.equals(other.pic))
return false;
if (siteId != other.siteId)
return false;
if (summary == null) {
if (other.summary != null)
return false;
} else if (!summary.equals(other.summary))
return false;
return true;
}
@Override
public String toString() {
return "Information [id=" + id + ", siteId=" + siteId + ", memberId="
+ memberId + ", categoryCode=" + categoryCode + ", addTime="
+ addTime + ", pic=" + pic + ", summary=" + summary + ", name="
+ name + ", attriDetail=" + attriDetail + "]";
}
}
2.
import java.util.List;
public class Demo2{
private long group;
private String name;
private int sort;
private List<Demo3> attribute;
.....setter and getter
}
3.
import java.util.List;
public class Demo3{
private Long id;
private String name;
private String unit;
private int typeid;
private boolean is_full;
private int sort;
private List<Demo4> detail;
private String userdata;
.....setter and getter
}
4.
public class Demo4{
private Long id;
private String detail;
private int sort;
private String checked;
.....setter and getter
}
/*
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
public class JSONUtil{
public static Object parseJson2ResultBean2(String json, Class type) {
try {
List list = parseJson2ResultList(json, type);
if ((list == null) || (list.isEmpty())) {
return null;
}
return list.get(0);
} catch (Exception e) {
throw new JsonParseException(e);
}
}
public static List parseJson2ResultList(String json, Class type) {
Map map = json2Map(json);
if ((map == null) || (map.isEmpty())) {
throw new JsonParseException("Json转换失败" + json);
}
if (map.containsKey("param:"))
throw new DubboException("调用接口失败:" + map.get("param:"));
if (map.containsKey("exception:"))
throw new DubboException("调用接口失败:" + map.get("exception:"));
if (!(map.containsKey("jsonValue"))) {
throw new JsonParseException("Json转换失败,Json串中不包含jsonValue:" + json);
}
JSONArray jsonArray = (JSONArray) map.get("jsonValue");
List result = json2ListBean(jsonArray, type);
return result;
}
public static Map json2Map(String json) throws JsonParseException {
return ((Map) json2Object(json, Map.class));
}
public static Object json2Object(String json, Class type)
throws JsonParseException {
if ((json == null) || (json.trim().length() < 1))
return null;
try {
return JSON.parseObject(json, type);
} catch (Exception e) {
throw new JsonParseException("Json转换失败:" + json, e);
}
}
public static List json2ListBean(JSONArray jsonArray, Class type) {
if ((jsonArray == null) || (type == null))
return null;
try {
List list = new ArrayList();
Iterator iterator = jsonArray.iterator();
while (iterator.hasNext()) {
JSONObject jsonObject = (JSONObject) iterator.next();
Object obj = JSON.toJavaObject(jsonObject, type);
list.add(obj);
}
return list;
} catch (Exception e) {
throw new JsonParseException(
"Json转换失败:" + jsonArray.toJSONString(), e);
}
}
}
*/
Demo1 demo1 = (Demo1)JSONUtil.parseJson2ResultBean2(json,Demo1.class);
String attr_detail = demo1.getAttriDetail();
JSONArray jsonarray = JSONArray.fromObject(attr_detail);
List<Demo2> listone = (List<Demo2>)JSONArray.toCollection(jsonarray,Demo2.class);
demo1.setAttriDetails(listone);
return demo1;
创建完的demo对象:
Demo1 demo;
Map map = new HashMap();
map.put("demo",demo);
html 页面调用:
<#list demo.attriDetails as list>
<#list list.attribute as attr>
<tr>
<td align="right" class="hui hui_lf">${attr.name}:</td>
<td class="hui bai_rig">
<#list attr.detail as detail>
<#if detail.checked == 'checked'>
${detail.detail}
</#if>
</#list>
${attr.userdata}
</#list>
</#list>
</td>
</tr>
这样 就可以 调出 你想要的任何数据了。完工。希望有更好的方法 可以 指教。