簡體   English   中英

Google Gson沒有使用ArrayList正確反序列化簡單對象

[英]Google Gson not deserializing simple object with ArrayList properly

我正在嘗試Gson,但無法解決這個問題。

最終發生的事情是創建了Network類(我的JSON根),並添加了三層。 這3個層沒有設置正確的“輸入”或“輸出”值(均為0)。

我期望輸入和輸出值大於0的三層。

以下是我的JSON以及類和Gson的代碼。

誰能告訴我這是怎么回事? 是我的JSON結構還是Java結構?

Gson代碼:

try(Reader reader = new InputStreamReader(ModelLoader.class.getResourceAsStream("/test.json"), "UTF-8")){
    Gson gson = new GsonBuilder().create();
    Network n = gson.fromJson(reader, Network.class);
    System.out.println(n);
}

我有一個非常非常簡單的JSON, 如下所示(根據下面的討論進行編輯)

{
  "layers" : [

    {"layer":
      {"input":300,
      "output":8000}
    },
    {"layer2":
      {"input":300,
      "output":8000}
    },
    {"layer3":
      {"input":300,
      "output":8000}
    }
  ]
}

這是Layer類:

public class Layer {

    int input;
    int output;
    float[][] weights;
    float[] inputs;
    float[] outputs;

    public Layer(int input, int output) {
        ...constructor code initializes vars...
    }

    public void setInput(int input) {
        this.input = input;
    }

    public void setOutput(int output) {
        this.output = output;
    }

    public void setInputs(float[] inputs) {
        this.inputs = inputs;
    }

    public void setWeight(float[][] weights) {
        this.weights = weights;
    }
}

這是包含圖層數組列表的類:import java.util.ArrayList;

public class Network {

    ArrayList<Layer> layers;

    public Network() {
        layers = new ArrayList<Layer>();
    }

    public void addLayer(Layer l) {
        layers.add(l);
    }
}

您的JSON(以及相應的POJO)結構應該看起來像這樣:

    {
      "layers" : [
          {"input":300,output":8000},
          {"input":300,"output":8000},
          {"input":300,"output":8000}
      ]
    }

    public class Layer {
       int input;
       int output;
   }

    public class Network {
        ArrayList<Layer> layers;
    }

如果每個圖層還具有名稱(或標簽),則其應具有以下結構:

    {
      "layers" : [
          {"label":"layer", "input":300,output":8000},
          {"label":"layer1", "input":300,"output":8000},
          {"label":"layer2", "input":300,"output":8000}
      ]
    }

    public class Layer {
       int input;
       int output;
       String label;
   }

    public class Network {
        ArrayList<Layer> layers;
    }

錯誤的反序列化列表<object>與 gson<div id="text_translate"><p> 我用List&lt;Object&gt;調試CUSTOMER object:</p><p> <a href="https://i.stack.imgur.com/Gh2Mx.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Gh2Mx.png" alt="在此處輸入圖像描述"></a></p><p> 這是 CUSTOMER.class:</p><pre> public class CUSTOMER { @XmlElements({ @XmlElement(name = "ADDRESS", type = ADDRESS.class), @XmlElement(name = "ZIP", type = ZIP.class), @XmlElement(name = "CITY", type = CITY.class), @XmlElement(name = "COUNTRY", type = COUNTRY.class), }) protected List&lt;Object&gt; addressAndZIPAndCITY; // other fields }</pre><p> 但是當我反序列化並從中創建 json 時,它僅包含:</p><pre> { "addressAndZIPAndCITY": [ { "value": "some value", "type": "some type" }, { "value": "some value 2", "type": "some type 2" }] }</pre><p> 缺少 ADRESS、ZIP、CITY 和 COUNTRY 對象標題。 所以反序列化不好。</p><p> 我無法更改List&lt;Object&gt;聲明。 是否可以選擇將其反序列化為帶有 ADRESS、ZIP、CITY 等的 json? 像這樣:</p><pre> { "addressAndZIPAndCITY": [{ "ADDRESS": { "value": "some value", "type": "some type" } }, { "ZIP": { "value": "some value 2", "type": "some type 2" } } ] }</pre><p> 編輯:我的意思是它看起來像 GSON 不知道哪個 object 在那里,但可能你知道如何向 model 添加一些注釋或其他東西來識別它?</p></div></object>

[英]Wrong deserializing List<Object> with gson

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Google Gson 反序列化問題 使用GSON序列化/反序列化簡單對象-無時區指示符錯誤 gson無法反序列化簡單界面 反序列化地圖 <Object, Object> 與GSon 錯誤的反序列化列表<object>與 gson<div id="text_translate"><p> 我用List&lt;Object&gt;調試CUSTOMER object:</p><p> <a href="https://i.stack.imgur.com/Gh2Mx.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Gh2Mx.png" alt="在此處輸入圖像描述"></a></p><p> 這是 CUSTOMER.class:</p><pre> public class CUSTOMER { @XmlElements({ @XmlElement(name = "ADDRESS", type = ADDRESS.class), @XmlElement(name = "ZIP", type = ZIP.class), @XmlElement(name = "CITY", type = CITY.class), @XmlElement(name = "COUNTRY", type = COUNTRY.class), }) protected List&lt;Object&gt; addressAndZIPAndCITY; // other fields }</pre><p> 但是當我反序列化並從中創建 json 時,它僅包含:</p><pre> { "addressAndZIPAndCITY": [ { "value": "some value", "type": "some type" }, { "value": "some value 2", "type": "some type 2" }] }</pre><p> 缺少 ADRESS、ZIP、CITY 和 COUNTRY 對象標題。 所以反序列化不好。</p><p> 我無法更改List&lt;Object&gt;聲明。 是否可以選擇將其反序列化為帶有 ADRESS、ZIP、CITY 等的 json? 像這樣:</p><pre> { "addressAndZIPAndCITY": [{ "ADDRESS": { "value": "some value", "type": "some type" } }, { "ZIP": { "value": "some value 2", "type": "some type 2" } } ] }</pre><p> 編輯:我的意思是它看起來像 GSON 不知道哪個 object 在那里,但可能你知道如何向 model 添加一些注釋或其他東西來識別它?</p></div></object> Gson重建反序列化對象時丟失數據 使用GSON和RETROFIT反序列化復雜的JSON對象 使用GSON反序列化包含JSON的對象 Gson 反序列化對象時忽略 null GSON JsonSyntaxException反序列化Java Date對象
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM