2016-11-18 18 views
0

私はGsonを試していますが、この問題は解決できません。Google GsonはArrayListを使って単純なオブジェクトを逆シリアル化しません。

何が起こるのかは、Networkクラスが作成され(JSONルート)、3つのレイヤーが追加されることです。これらの3つのレイヤーには、正しい「入力」値または「出力」値が設定されていません(両方とも0です)。私は0

上記の入力値と出力値との3層を期待してい

は、以下の私のJSONクラスとGsonためのコードです。

何が間違っているか教えていただけますか?それは私のJSON構造かJava構造ですか?

Gsonコード:私はそうのような非常に、非常に単純なJSONを持って

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); 
} 

(以下の議論当たりに編集)

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; 
    } 
} 
:ここ

{ 
    "layers" : [ 

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

は、レイヤクラスです

ここにarrを含むクラスがあります層のリスト: import java.util.ArrayList;

public class Network { 

    ArrayList<Layer> layers; 

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

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

「layer」、「layer2」、および「layer3」はどのようにマップする必要がありますか? –

+0

@SotiriosDelimanolはレイヤークラスです。 – Seephor

+0

なぜですか?あなたのクラスのグループのどこに 'layer'、' layer2'、または 'layer3'という名前のものがありますか? –

答えて

0

あなたの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; 
    } 
関連する問題