亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 GSON 在 Java 中創建不同格式的嵌套 JSON 對象

使用 GSON 在 Java 中創建不同格式的嵌套 JSON 對象

守候你守候我 2023-08-16 18:22:09
我百分百確定這個問題已經被問過一百萬次了,但我真的不確定如何正確處理這個問題。我還沒有對 JSON 做太多工作,也沒有對其進行序列化?;旧希@就是我想使用 GSON 創建的內容:{    "wrapper" : [        {            "content": "loremipsum",            "positions": [0,3]        },        {            "content": "foobar",            "positions": [7]        },        {            "content": "helloworld"        }    ]}分解它,我們有一個數組字段,其中包含對象,這些對象本身包含兩個字段,其中一個映射到字符串,另一個映射到另一個數組,該數組可以包含未知數量的整數,也可以完全缺失。我什至無法想象如何用 GSON 得到這個結果。到目前為止,我的想法是將所有內容都放在野獸中Map<String, List<Map<String, Object>>>并對其進行轉換,但是該對象讓我煩惱,因為在這種特殊情況下它可能是字符串或列表??赡軙袕娭妻D換,但這聽起來像是一件愚蠢而復雜的事情,如果我只是在 String.format() 或類似的內容中手動鍵入它,看起來會更容易。難道就沒有更簡單的方法來處理這些東西嗎?
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

我會為您的數據創建一些 POJO 類:


class MyData {

    private List<Data> wrapper;


    //getters setters constructors

}


class Data {

    private String content;

    private List<Integer> positions;


    //getters setters constructors

}

然后反序列化它:


Gson gson = new Gson();

String json = //json here

MyData myData = gson.fromJson(myJson, MyData.class);

對于序列化:


MyData myData = ...

String json = gson.toJson(myData);

另一種方法可以是使用JsonParser并訪問其元素來解析該結構:


JsonParser jsonParser = new JsonParser();

JsonElement jsonElement = jsonParser.parse(json);

JsonElement wrapperElement = jsonElement.getAsJsonObject().get("wrapper"); //access wrapper

JsonArray array = wrapperElement.getAsJsonArray(); // access array


查看完整回答
反對 回復 2023-08-16
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

沒有POJO,這似乎可以使用Gson解決嵌套JSON解決方案


package com.test;


import com.google.gson.JsonObject;


public class Main {


    public static void main(String[] args) {

        

        JsonObject ex3 = new JsonObject();

        ex3.addProperty("example3", 30);

        

        JsonObject ex2 = new JsonObject();  

        ex2.add("example2", ex3.getAsJsonObject());

        

        JsonObject ex1 = new JsonObject();  

        ex1.add("example1", ex2.getAsJsonObject());

        

        System.out.println(ex1.toString());

    }       

}

輸出是:


{"example1":{"example2":{"example3":30}}}


查看完整回答
反對 回復 2023-08-16
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

最好使用Pojo進行格式化。


class Wrapper{

 private List<Data> data;

 // geters, seters

}

class Data{

 private String content;

 private List<Integer> positions;

 // geters, seters

}

對于反序列化/序列化,您可以使用Jackson


ObjectMapper mapper = new ObjectMapper();

Wrapper wriper = mapper.readValue(dataString, Wrapper.class);

String jsonString = mapper.writeValueAsString(wriper);

或Gson


Gson gson = new Gson();

Wrapper wriper = gson.fromJson(dataString, Wrapper.class);

String json = gson.toJson(wriper);


查看完整回答
反對 回復 2023-08-16
  • 3 回答
  • 0 關注
  • 280 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號