2016-09-06 3 views
0

У нас есть довольно странная полезная нагрузка JSON, которую нужно десериализовать, но я не уверен, как это сделать с Java и Gson.Deserialize JSON объект, который не имеет имени

{ 
    "Red": { 
      "Level 1": "Specify Action", 
      "Level 2": "Action Taken", 
      "Level 3": "No Action Taken" 
    }, 
    "Orange": { 
      "Level 4": "Defeat Gannon", 
      "Level 5": "Save Princess", 
      "Level 6": "Find Triforce" 
    } 
} 

Мы можем использовать HashMap десериализовать отдельные объекты (например, «Красный» и «Orange»), но проблема мы с пытаемся объяснить родительский объект, который, как показывает код , не имеет никакого имени, чтобы легко подключиться.

+0

Как вы передаете эту полезную нагрузку в своей функции HashMap, если у нее нет имени переменной? – petryuno1

+0

Извините, я не был чист. Я только выяснил, что могу использовать HashMap для представления объектов «Красный» и «Оранжевый», но, как вы указали, я не могу передать общую полезную нагрузку, так как я не уверен, как ссылаться на родительский объект. – killQuotes

+0

Что вы подразумеваете под родительским объектом.? –

ответ

0

Учитывая, что ваш JSON выглядит следующим образом:

{ 
    "Red": { 
     "Level 1": "Specify Action", 
     "Level 2": "Action Taken", 
     "Level 3": "No Action Taken" 
    }, 
    "Orange": { 
     "Level 4": "Defeat Gannon", 
     "Level 5": "Save Princess", 
     "Level 6": "Find Triforce" 
    } 
} 

Я буду использовать HashMap, что-то вроде ниже с Джексоном API. Я думаю, что подобное можно сделать и с использованием GSON

import com.fasterxml.jackson.core.type.TypeReference; 
import com.fasterxml.jackson.databind.ObjectMapper; 

     import java.io.IOException; 
     import java.util.HashMap; 
     import java.util.Map; 

     public class Test { 

      public static void main(String[] args) throws IOException { 

       ObjectMapper mapper = new ObjectMapper(); 
       String jsonInString = "{\n" + 
         " \"Red\": {\n" + 
         "  \"Level 1\": \"Specify Action\",\n" + 
         "  \"Level 2\": \"Action Taken\",\n" + 
         "  \"Level 3\": \"No Action Taken\"\n" + 
         " },\n" + 
         " \"Orange\": {\n" + 
         "  \"Level 4\": \"Defeat Gannon\",\n" + 
         "  \"Level 5\": \"Save Princess\",\n" + 
         "  \"Level 6\": \"Find Triforce\"\n" + 
         " }\n" + 
         "}"; 

       TypeReference< Map<String, HashMap<String, String>>> typeRef 
         = new TypeReference<Map<String, HashMap<String, String>>>() { 
       }; 

       Map<String, HashMap<String, String>> value = mapper.readValue(jsonInString, typeRef); 

       System.out.println(value); 

      } 
     } 
Смежные вопросы