2014-02-18 77 views
0

我對Java完全陌生,但有其他語言的使用經驗。我有以下JSON文件,我試圖把它帶入一個Java程序。嘗試使用GSON將JSON轉換爲Java

{ 
    "Progression": [ 
     { 
      "ProgressionName": "An Apple a Day...", 
      "Steps": [ 
       { 
        "StepName": "Collect an Apple", 
        "Type": "COLLECT", 
        "RewardType": "UNLOCK_CRAFTING", 
        "Reward": "minecraft:golden_apple" 
       }, 
       { 
        "StepName": "Craft a Golden Apple", 
        "Type": "CRAFT", 
        "RewardType": "GIVE", 
        "Reward": "minecraft:diamond" 
       } 
      ] 
     }, 
     { 
      "ProgressionName": "Keeps the Dr Away...", 
      "Steps": [ 
       { 
        "StepName": "Collect an Apple", 
        "Type": "COLLECT", 
        "RewardType": "UNLOCK_CRAFTING", 
        "Reward": "minecraft:golden_apple" 
       }, 
       { 
        "StepName": "Craft a Golden Apple", 
        "Type": "CRAFT", 
        "RewardType": "GIVE", 
        "Reward": "minecraft:diamond" 
       } 
      ] 
     } 
    ] 
} 

我有我的想法是正確的存儲JSON以下類:

public class ProgressionData { 
    private Progression progresion; 

    public class Progression { 
     private String ProgressionName; 
     private ProgressionSteps Steps; 
    } 

    public class ProgressionSteps { 
     private String StepName; 
     private String Type; 
     private String RewardType; 
     private String Reward; 
    } 
} 

這是呼叫我使用:

BufferedReader br = new BufferedReader(new FileReader(configFile)); 
ProgressionData progressiondata = new Gson().fromJson(br, ProgressionData.class); 

當我調試的代碼, progressiondataNULL。我知道我錯過了一些基本的東西,希望有人能指引我走向正確的方向。

+2

不應該'ProgressionSteps'是一個數組?哦,當然你會得到某種錯誤? –

+0

相同的進展:它是您的JSON文件中的數組。 –

+0

這不是「進步」,而是「進步」,首都P. – DSquare

回答

0

鑑於你的榜樣,你的基類應該看起來像上面:

public class ProgressionData { 
    private Progression[] progresion; 

    public class Progression { 
     private String ProgressionName; 
     private ProgressionSteps[] Steps; 

     // Add getters and setters 
    } 

    public class ProgressionSteps { 
     private String StepName; 
     private String Type; 
     private String RewardType; 
     private String Reward; 

     // Add getters and setters 
    } 

    // Add getter and setter for "Progression" 
} 

注:

  • progressionsteps領域實際上是arrays

  • 您需要爲您的房產添加getterssetters方法。

  • 您可能會遇到一些問題,因爲您正在解析從json到property(小寫字母p)的Property(以大寫字母P開頭)密鑰。如果您嘗試將字段更改爲Property,則編譯器可能會抱怨,因爲您不能使用同名的ClassField。在這種情況下,您必須查找一些GSON解析選項(例如,忽略大小寫)。

0

你試圖映射一個array of Progression objectsProgression object,從

private Progression progresion; 

變化

private List<Progression> progresion; 

private Progression[] progresion; 

Progression Step objects

也同樣的事情,不要忘記創建getter/setter方法爲您的成員或更改訪問修飾符

0

你的類是錯誤的,因爲你有JSONArray內,請嘗試以下方法:

public class ProgressionData { 

    private List<Progression> progresion; 

    public class Progression { 

     private String ProgressionName; 
     private List<ProgressionSteps> Steps; 

    } 

    public class ProgressionSteps { 

     private String StepName; 
     private String Type; 
     private String RewardType; 
     private String Reward; 

    } 
} 
0

您應該更新下面的東西,使其工作

  • 有我在progresion的錯字,應該是Progression。 (這可能是讓你的對象爲空的主要原因,變量的名稱應該與Json中的鍵相匹配,而不是classname。你也可以在你的POGO類中使用註釋來映射變量的名稱,使用@SerializedName("Progression")
  • Progression是一個數組
  • StepsProgression是一個數組

請如下更新您的ProgressionData。

public class ProgressionData { 
    @SerializedName("Progression") 
    private List<Progression> progression; 

    public class Progression { 

     private String ProgressionName; 
     private List<ProgressionSteps> Steps; 

     //Setters and Getters 
    } 

    public class ProgressionSteps { 

     private String StepName; 
     private String Type; 
     private String RewardType; 
     private String Reward; 

     //Setters and Getters 
    } 

    //Setters and Getters 
} 

使用下面的代碼來解析您的JSON,

BufferedReader br = new BufferedReader(new FileReader(configFile)); 
ProgressionData progressiondata = new Gson().fromJson(br, ProgressionData.class); 
相關問題