2013-08-24 2 views
0

Я пытаюсь вывести список в форматировании JSON, но это не так, как я хочу.Вывод JSON

Вот результат:

{ 
    "songMap": [ 
     { 
      "SID": "699", 
      "SDID": "1079287588763212246" 
     }, 
     { 
      "SID": "700", 
      "SDID": "1079287588763212221" 
     }, 
     { 
      "SID": "701", 
      "SDID": "1079287588763212230" 
     } 
    ] 
} 

Вот что я хотел бы, чтобы это выглядело как:

[ 
     { 
      "SID": "699", 
      "SDID": "1079287588763212246" 
     }, 
     { 
      "SID": "700", 
      "SDID": "1079287588763212221" 
     }, 
     { 
      "SID": "701", 
      "SDID": "1079287588763212230" 
     } 
] 

мне не нужно ни хочу промежуточный массив, я не уверен, почему это добавляется. У меня есть пользовательский класс следующим образом:

public class songID { 
    public int SID; 
    public String SDID; 

    public songID() {} 

    public songID(int key, String value) { 
     this.SID = key; 
     this.SDID = value; 
    } 
} 

Это как это сериализации:

Gson gson = new Gson(); 
String json = gson.toJson(songMap); 

Если я распечатать строку JSON, это выглядит так, как я хочу его. Однако сервер добавляет дополнительную «SongMap». Вот как моя переменная объявлена ​​в верхней части класса:

private List<songID> songMap; 
..... 
songMap = new ArrayList<songID>(); 
+0

сам songMap, который содержит много songID объектов –

+0

возможный дубликат [JAX-RS - JSON без корневого узла] (http://stackoverflow.com/questions/ 4838192/jax-rs-json-without-root-node) – Thilo

+0

Кажется, есть (не переносные) способы настроить JAX-RS, чтобы этого не делать (см. Связанный другой вопрос), но если вы также управляете клиентом , вероятно, проще просто развернуть ответ на клиенте. – Thilo

ответ

0

Кажется, вы не сериализации List непосредственно, но контейнер, имеющий List названный как songMap. (Смешивая выбор имени, кстати.) Если вы сериализуете List, то он выглядит отлично, как показано ниже.

songMap = new ArrayList<songID>(); 
songMap.add(new songID(699, "1079287588763212246")); 
songMap.add(new songID(700, "1079287588763212221")); 

GsonBuilder gb = new GsonBuilder(); 
Gson gson = gb.setPrettyPrinting().create(); 

System.out.println(gson.toJson(songMap)); 

Выход:

[ 
    { 
    "SID": 699, 
    "SDID": "1079287588763212246" 
    }, 
    { 
    "SID": 700, 
    "SDID": "1079287588763212221" 
    } 
] 
+0

Правильно, я получаю этот ответ, когда я печатаю gson, как я упоминал выше, проблема возникает, когда сервер отправляет ответ. Я получаю вышеупомянутый вывод, анализируя его с помощью Fiddler. –

+0

Возможно, вам понадобится 'gson.toJson (serverResponse.getSongMap());' вместо сериализации 'serverResponse' напрямую. Кстати, это psuedo-code. Мне нужно, чтобы ваш код был точным. –