2016-09-23 4 views
0

Я использую Gson для преобразования объектов Java в GSON. Я хотел преобразовать свой HashMap в JSON.hashmap для JSON с использованием GSON

Предполагая, что мой Object1 имеет структуру:

public class Object1 { 
    String a; 
    String b; 
    String c; 

    String toString() { 
      return "a: " + a + " b: " + b + " c: " + c; 
    } 
} 

и мой Object2 имеет структуру:

public class Object2 { 
    String e; 
    String f; 
} 

Я хотел мой последний JSON выглядеть

{ 
    { 
     "a" : "aValue", 
     "b" : "bValue", 
     "c" : "cValue" 
    } : { 
      "e" : "eValue", 
      "f" : "fValue" 
     } 
} 

Bit я получаю его как

{ 
"a: aValue b: bValue c: cValue" : { 
     "e" : "eValue", 
     "f" : "fValue" 
    } 
} 

Возможно ли это в желаемой форме.

Я попытался использовать TypeToken, указанный в документации JSON. Это не помогло.

+0

пл. отправьте свой код, который выполняет преобразование. Неясно, что вы сделали, чтобы получить этот результат. – Cyclotron3x3

+0

JSON, вы хотели недействительно –

+0

Вы упоминаете 'HashMap', но я его не вижу? –

ответ

0

Вы не можете получить ожидаемую форму.

Элемент JSON всегда является ключом paar, а ключ всегда является текстом (или строкой). Но в вашем случае ключ является объектом.

С моей точки зрения, если вы хотите использовать ключ как объект, вы можете получить его как строку, а затем использовать ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper), чтобы преобразовать его в ваш ожидаемый класс.

final ObjectMapper mapper = new ObjectMapper(); 
Object1 object1 = mapper.readValue(object1String, Object1.class) 
0

Способ toString() может вызвать проблемы, Gson обработает карту, нет необходимости предоставлять toString(), как у вас. Вот почему ваш результат дает вам это.

Также взгляните на Jackson, это будет удобно для вашей цели и очень прост в использовании.

Map map = new HashMap(); 
ObjectMapper mapper = new ObjectMapper(); 
String json = mapper.writeValueAsString(map); 
// write json to file 
+0

Я не думаю, что toString() является причиной. Поскольку даже он не переопределяется, Object1 также имеет функцию toString. Причина в ключе JSON может быть только строкой. Это одно из отличий от карты на Java. –

+0

Я согласен с @CongWang. Я пробовал без toString и сопоставил ссылку на объект с значением –

0

Вы можете написать свой метод ToString, как:

public String toString() { 
    return "{a: " + a + ", b: " + b + ", c: " + c + "}"; 
} 

В вашем главном классе, вы звоните:

public static void main(String[] args) { 
    Object1 object1 = new Object1("aValue", "bValue", "cValue"); 
    Object2 object2 = new Object2("eValue", "fValue"); 
    Map<String, Object2> map = new HashMap<String, Object2>(); 
    map.put(object1.toString(), object2); 
    String json = new Gson().toJson(map); 
} 

Затем ваш выход, как: {"{a: aValue, b: bValue, c: cValue}":{"e":"eValue","f":"fValue"}}