2013-11-13 2 views
2

Я использую Gson для генерации JSON из List<Users>. Я хотел бы, чтобы генерировать JSON документ со структурой заголовка/тела, что-то вроде:Создание JSON-документа с конвертом/заголовком с использованием Gson

{ 
    "count" : 15, 
    "users" : [ 
    { 
     "userId" : 149, 
     "userName" : "jack0231", 
     "displayName" : "Jackie" 
    }, 
    { 
     "userId" : 301, 
     "userName" : "helms_mighty", 
     "displayName" : "Hippoman" 
    } 
... 
    ] 
} 

В настоящее время я просто выписывая структуру себя так:

StringBuilder jsonResp = new StringBuilder(); 
jsonResp.append("{\"count\":"+users.size()+","); 
jsonResp.append("\"users\":"); 
Gson gs = new Gson(); 
jsonResp.append(gs.toJson(users)); 
jsonResp.append("}"); 

Есть ли лучше/встроенный способ сделать это? Благодаря!

+1

не имеет отношения к вашему вопросу, но использовать либо 'StringBuilder '* or * string concatenation с' + = ', а не * both *. –

+0

Хорошая точка, спасибо. – Steven

ответ

3

Это то, что вам нужно. Если вы поместите свой список в другой (простой) класс, вы можете сериализовать правильно за один шаг, избегая всех шаблонов StringBuilder. Вы можете напрямую запустить этот пример.

package stackoverflow.questions.q19966529; 

import java.util.*; 

import com.google.gson.Gson; 

public class Q19966529 { 

    public static class User{ 
     Long userId; 
     String userName; 
     String displayName; 

     public User(Long userId, String userName, String displayName){ 
      this.userId = userId; 
      this.userName = userName; 
      this.displayName = displayName;    
     } 
    } 

    public static class UserList{ 
     private List<User> list = new ArrayList<>(); //java 7 
     private int count = 0; 

     public void addUser(User u){ 
      list.add(u); 
      count = list.size(); 

     } 
    } 

    public static void main(String[] args) { 

     UserList ul = new UserList(); 
     ul.addUser(new User(149L, "jack0231", "Jackie")); 
     ul.addUser(new User(301L, "helms_mighty", "Hippoman")); 

     String json = new Gson().toJson(ul); 
     System.out.println(json); 
    } 

} 

и это результат:

{"list":[{"userId":149,"userName":"jack0231","displayName":"Jackie"},{"userId":301,"userName":"helms_mighty","displayName":"Hippoman"}],"count":2} 

Чтобы увидеть его отформатированный как ваш пример, вам нужен внешний форматировщик как this

+0

Ugh. Думаю, это работает. Может быть, я должен подклассировать Гссона, это тоже сработает. Ваш ответ будет работать, поэтому я буду принимать его как ответ. Большое спасибо за сообщение ответа! – Steven

0

Как насчет создания класса SerializedUsers, добавьте поле для данных подсчета и поле для списка пользователей. Затем сериализовал этот класс.

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