记录一下json相关的东西
1-返回一对多的json形式
json如下:
{
"hashMap": {
"浙江": [
{
"id": 1,
"name": "杭州"
},
{
"id": 2,
"name": "绍兴"
}
"吉林": [
{
"id": 3,
"name": "长春"
},
{
"id":4 ,
"name": "白城"
}
]
}
有人建议用gson,不过我还是用hashmap做的,比如商品类别:先把商品类别查出来,再把商品查出来,根据id存入hashmap中返回给前端
代码如下:
Map<String,List<T>> hashMap=new HashMap<String, List<T>>();
//查出商品的父级id
List<T> list=goodsService.getParentTypeList();
//查出商品的id
List<T> listGoods=goodsService.goodsTypeList();
for (T gt:list){
List<T> typeList=new ArrayList<T>();
for (T g:listGoods){
if (gt.getId()==g.getParent_id()){
typeList.add(g);
}
}
`hashMap.put(gt.getName(),typeList) ;
}
先查出商品的父级id,再查出所有的商品以及id,当循环商品类别时就要新建一个ArrayList,当商品父级id等于商品id时,就循环将商品的对象添加到typeList中,循环后将typeList 放到hashmap中,以key-value的形式保存,形成一对多的形式
2-以map形式返回json
返回形式如下:
{
"a":1,
"b":2
}
代码如下
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
for (T t : list) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("a","1");
map.put("b","2);
mapList.add(map);
}
若返回形式如下:
{
"total":2,
"XXX":[
{
"a":1,
"b":2
}
]
}
代码如下:
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
for (T t : list) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("a","1");
map.put("b","2);
mapList.add(map);
}
Map map = new HashMap();
map.put("total","2");
map.put("XXX",mapList);
return map;
3、以对象的形式直接返回
查出的数据放到对象中,也就是dto,然后直接返回对象即可,这种形式比较方便,比如声明一个dto
private String name;
private Integer id;
private Map<T> map;
private List<T> list;
二、 json解析
java的json解析包有好几种,都差不多,先说net.sf.json这个,下面再说阿里巴巴的:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
1、传入json字符串jsonStr如下:
{
"id": 1,
"name": "杭州"
}
这种形式是规则的json数组,直接解析即可:
JSONArray jsonArray=JSONArray.fromObject(jsonStr);
String id = jsonArray.getString("id");
String name = jsonArray.getString("name");
2、若传入json字符串如下:
{
"total":2,
"XXX":[
{
"a":1,
"b":2
},
{
"a":10,
"b":20
}
]
}
json解析如下:
JSONObject jsonObject=JSONObject.fromObject(jsonStr);
JSONArray jsonArray=jsonObject.getJSONArray("XXX");
for (int i=0;i<jsonArray.size();i++){
JsonObject JO = jsonArray..getJSONObject(i);
String a = JO.getString("a");
String b = JO.getString("b");
}
下面说下fastjson,这个用的人也不少,先引用一下:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.37</version>
</dependency>
一般会用到三个方面:
1、json字符串转化为对象存储
2、json字符串单取数据
3、将对象转化为json存储
如下:
String jsonStr = "{\"watermark\":{\"timestamp\":15204068,\"appid\":\"wx15b96f75eba141\"},\"phoneNumber\":\"176823109\",\"countryCode\":\"86\",\"purePhoneNumber\":\"176823109\"}";
//json字符串--转化为对象
TestBean testBean = JSON.parseObject(jsonStr,TestBean.class);
System.out.println(testBean.getPhoneNumber());
List<Water> list = testBean.getWatermark();
System.out.println("list--"+list);
System.out.println("对象获取appid-->"+list.get(0).getAppid());
for (Water water:list){
System.out.println("对象获取timestamp-->"+water.getTimestamp());
}
//json字符串--单取出来
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println("jsonobject--"+jsonObject);
String phonenumber = jsonObject.getString("phoneNumber");
System.out.println("phonenumber-->"+phonenumber);
JSONObject jsonObject1 = jsonObject.getJSONObject("watermark");
System.out.println("jsonobject1-->"+jsonObject1);
System.out.println("appid-->"+jsonObject1.getString("appid"));
//对象转json
String toJson = JSON.toJSONString(testBean);
System.out.println("toJson-->"+toJson);
我将打印结果贴出来,大家体验一下就懂了
176823109
list--[com.mtgg.bean.Water@46288ed]
对象获取appid-->wx15b96f75eba141
对象获取timestamp-->15204068
jsonobject--{"watermark":{"timestamp":15204068,"appid":"wx15b96f75eba141"},"phoneNumber":"176823109","countryCode":"86","purePhoneNumber":"176823109"}
phonenumber-->176823109
jsonobject1-->{"timestamp":15204068,"appid":"wx15b96f75eba141"}
appid-->wx15b96f75eba141
toJson-->{"countryCode":"86","phoneNumber":"176823109","purePhoneNumber":"176823109","watermark":[{"appid":"wx15b96f75eba141","timestamp":"15204068"}]}
简单记录下,能帮助大家更好