json字符串解析 以及 组成json数据的方式

记录一下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"}]}

简单记录下,能帮助大家更好

 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/Goligory/article/details/78826604