2015-08-13 2 views
1

Я пытаюсь прочитать этот JSON в Java:Чтение объекта, который содержит массив объектов из JSON в Java

{ 
    "custom enchants": { 
    "Explosive Bow": { 
     "max enchant level": " 1", 
     "name": "Explosive", 
     "enchant type": " explosive" 
    }, 
    "Poison Bow": { 
     "max enchant level": "4", 
     "name": "Poison", 
     "enchant type": "poison" 
    } 
    } 

который генерируется этим кодом здесь:

 JSONObject explosiveBowObject = new JSONObject(); 
explosiveBowObject.put("name", "Explosive"); 
explosiveBowObject.put("enchant type", " explosive"); 
explosiveBowObject.put("max enchant level", " 1"); 

JSONObject poisonBowObject = new JSONObject(); 
poisonBowObject.put("name", "Poison"); 
poisonBowObject.put("enchant type", "poison"); 
poisonBowObject.put("max enchant level", "4"); 

generatedEnchants.put("Explosive Bow", explosiveBowObject); 
generatedEnchants.put("Poison Bow", poisonBowObject); 
jsonObject.add(generatedEnchants); 

Я борясь с чтением в объекте json, который содержит jsonarray jsonobjects. Любая помощь приветствуется!

Благодаря

удалось решить его путем выяснить что-то вдоль этих линий:

ArrayList<Object> arrayList = new ArrayList<>(); 
     for(Object object1 : jsonObject){ 
      System.out.println("Json Object Value: " + object1); 
      if(object1 instanceof JSONObject){ 
       System.out.println(((JSONObject) object1).keySet()); 
       for(Object object : ((JSONObject)object1).keySet()){ 
        arrayList.add(object); 
       } 
      } 
     } 
     String name = "t"; 
     for (int i =0; i < arrayList.size(); i++){ 
      System.out.println("Array List " + i + " " + arrayList.get(i)); 
      if(arrayList.get(i) instanceof JSONObject){ 
       name = (String) ((JSONObject)arrayList.get(i)).get("name"); 
      } 
     } 
+0

почему Взрывное Bow заключена в [], но яд Bow заключен в {} - который является правильным? Я не уверен, чего вы пытаетесь достичь, но кажется странным, что Explosive Bow не является объектом JSON, но Position Bow - – Mousey

+0

Непонятно, что вы хотите, вы хотите знать, как вы можете превратить JSON в java object (deserialize)? –

+0

Hey Извините, обновил OP с правильным синтаксисом. Забыл, что вчера, прежде чем я вышел из офиса, я не переместил его на объект. Я хочу по существу читать в JSON в список, hashmap и т. Д. Я пытаюсь понять, как разбирать массивы и объекты. – Kato

ответ

0

Посмотреть оригинальный пост для грубой идеи о том, как перебираем JSon массив, содержащий объекты JSON.

Ответ:

public void registerCustomEnchants() throws IOException, ParseException { 
    JSONArray enchantJSONArray = (JSONArray)new JSONParser().parse(new FileReader(String.valueOf(pathToJSONFile))); 
    for(Object o : enchantJSONArray){ 
     jsonArray.add(o); 
    } 
    Iterator iterator = jsonArray.iterator(); 
    while (iterator.hasNext()) { 
     JSONObject jsonObject1 = ((JSONObject) iterator.next()); 
     Iterator<? extends Map.Entry<Object, Object> > it = jsonObject1.entrySet().iterator(); 
     while(it.hasNext()) { 
      String name = null, enchantType = null; 
      long maxEnchantLevel =0; 
      Map.Entry<Object, Object> pair = it.next(); 
      if(pair.getKey().equals("name")){ 
       name = (String) pair.getValue(); 
      } 
      if(pair.getKey().equals("enchant type")){ 
       enchantType = (String) pair.getValue(); 
      } 
      if(pair.getKey().equals("max enchant level")){ 
       maxEnchantLevel = (long)pair.getValue(); 
      } 
      parseEnchant(name, enchantType, maxEnchantLevel); 
     } 
    } 
} 

public void parseEnchant(String name, String enchantType, long maxEnchantLevel){ 
    new CustomEnchant(id++, name,enchantType, maxEnchantLevel); 
} 

/** 
* Creates a sample config with 2 usable items with custom enchants. 
* @throws IOException 
*/ 
private void createDefaultCustomEnchantsJSONFile() throws IOException { 
    FileReader fileReader = new FileReader(String.valueOf(pathToJSONFile)); 

    if (!checkIfDefaultExists()) { 
     JSONObject explosiveBowObject = new JSONObject(); 
     explosiveBowObject.put("max enchant level", 1); 
     explosiveBowObject.put("enchant type", "explosive"); 
     explosiveBowObject.put("name", "Explosive"); 

     JSONObject poisonBowObject = new JSONObject(); 
     poisonBowObject.put("max enchant level", 4); 
     poisonBowObject.put("enchant type", "poison"); 
     poisonBowObject.put("name", "Poison"); 

     jsonArray.add(explosiveBowObject); 
     jsonArray.add(poisonBowObject); 

     //Enables the pretty version of Gson fortmatting 
     Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
     String json = gson.toJson(jsonArray); 

     //Writes the shit to the file. 
     FileWriter fileWriter = new FileWriter(String.valueOf(pathToJSONFile)); 
     fileWriter.write(json); 
     fileWriter.flush(); 
    } 
} 
Смежные вопросы