1. 程式人生 > >java生成複雜的巢狀json

java生成複雜的巢狀json

在之前並沒有接觸到關於複雜巢狀json資料,都是返回一些簡單的json資料。最近了解到JSONObject和JSONArray的一些知識。

json物件與json物件陣列的轉化關係



var jsonStr  = "{\"userId\":\"001\"}";  // json物件字串
var jsonArryStr = "[{\"userId\":\"001\"},{\"userId\":\"002\"}]"; // json陣列字串
var jsonObj  = JSON.parse(jsonStr);     // 字串轉為json物件
var jsonArry = JSON.parse(jsonArryStr); // 字串轉為json陣列
var jsonStr = JSON.stringify(jsonObj); // json物件轉為字串 var jsonArryStr=JSON.stringify(jsonArry);// json陣列轉為字串 alert(jsonStr); alert(jsonArryStr); alert(jsonObj.userId); alert(jsonArry[0]['userId']);

在這重點講解複雜巢狀json的生成,下面就是我生成的json資料

{“github”:[{“g_name”:”實驗室官網”},{“g_name”:”納新系統”},{“g_name”:”聯絡我們”}],”project”:[{“p_name”:”智慧四旋翼無人機”},{“p_name”:”爪爪智慧寵物掛件”},{“p_name”:”城市停車智慧誘導系統”}],”skills”:[{“address”:”FZ332”,”person”:”張鎮”,”subject”:”正則表示式”,”time”:”2018-02-24 17:33:03.0”},{“address”:”FZ332”,”person”:”成大寶”,”subject”:”查詢演算法”,”time”:”2018-02-22 17:33:07.0”},{“address”:”FZ332”,”person”:”周浩”,”subject”:”哈夫曼樹”,”time”:”2018-02-28 17:12:16.0”}],”status”:0}

看過別人的部落格講述了三中json的生成,自我感覺第二種挺不錯的,是用的Map集合的方式。

/*
         * 用Map方式,先將所需要的資料放入map集合中,
         * 然後把所有的集合放入List集合
         * List集合可以與json互相轉化
         */
Map<String,Object> map=new HashMap<String,Object>();

List<Map> ttmaps=new ArrayList<>();
        for(Technology tt:technology) {
            //json.put
(String.valueOf(tt.getT_id()), tt); Map<String,Object> tts=new HashMap<String,Object>(); tts.put("subject", tt.getSubject()); tts.put("person", tt.getPerson()); tts.put("address", tt.getAddress()); tts.put("time", tt.getTime()); //System.out.println(tt.getSubject()+" "); ttmaps.add(tts); //tts.clear(); } map.put("skills", ttmaps); System.out.println("集合中Map建立json物件:" + new JSONObject(map)); try { ResponseUtil.write(response, new JSONObject(map)); }catch(Exception e) { e.printStackTrace(); }

下來說其他兩種,是使用字串和bean的方式

這裡寫圖片描述

/*
首先建立json物件,把需要的欄位放到json中,將所有的json物件新增到
List集合中,最後完成List與json的轉化
*/
 static void StringCreateJson(){
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","王尼瑪");

        //粉絲是個陣列,其實就是巢狀json
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("name","小王");
        jsonObject1.put("age",7);

        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("name","小尼瑪");
        jsonObject2.put("age",10);

        //從此處可以看出其實list和json也是互相轉換的
        List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
        jsonObjects.add(jsonObject1);
        jsonObjects.add(jsonObject2);
        jsonObject.put("fans",jsonObjects);

        System.out.println("jsonObject直接建立json:" + jsonObject);
    }
/*
使用的bean的方式其實和上面的兩種大同小異,只不過使用setter的方式賦值,最後建立生成new JSONObject(actor)
*/
 //第三種,也是比較常用的,用bean轉換,(這裡用的是map作為子json,如果必須要建立複雜bean物件,建議用Gjson操作)
    static void beanCreateJson(){
        Actor actor = new Actor();
        actor.setName("王尼瑪");
        Map<String,Object> map1 = new HashMap<String,Object>();
        map1.put("name","小王");
        map1.put("age",7);
        Map<String,Object> map2 = new HashMap<String,Object>();
        map2.put("name","小尼瑪");
        map2.put("age",10);
        List<Map> maps = new ArrayList<Map>();
        maps.add(map1);
        maps.add(map2);
        actor.setFans(maps);
        System.out.println("java bean建立json物件:" + new JSONObject(actor));
    }
/*
java bean
*/

public class Actor {
    private String name;
    private List<Map> fans;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Map> getFans() {
        return fans;
    }

    public void setFans(List<Map> fans) {
        this.fans = fans;
    }

在理解了別人寫的部落格後,自己能按照思路實現出來,對自己而言也是一種掌握和學習。