2012-02-08 3 views
1

Когда я использую проект JSON-Lib, я могу создать с помощью командыСоздайте отдельную JSON строку с Gson

JSONObject jObject = new JSONObject(); 
jObject.accumulate("articles", list); 
String json = jObject.toString(); 

Следующий выход:

{ 
    "articles": [ 
     { 
      "amount": "50", 
      "id": "1", 
      "pct": "50,00", 
      "price": "162,37", 
      "startamount": "100", 
      "stockvalue": "8118,45" 
     }, 
     { 
      "amount": "20", 
      "id": "2", 
      "pct": "20,00", 
      "price": "164,83", 
      "startamount": "100", 
      "stockvalue": "3296,60" 
     }, 
     { 
      "amount": "20", 
      "id": "3", 
      "pct": "20,00", 
      "price": "170,40", 
      "startamount": "100", 
      "stockvalue": "3408,00" 
     },... 
] 
} 

Между тем я использую проект Gson и привязанный к нему. Но следующий код:

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

даст мне этот выход:

[ 
    { 
     "id": "1", 
     "amount": "50", 
     "startamount": "100", 
     "pct": "50,00", 
     "price": "162,37", 
     "stockvalue": "8118,45" 
    }, 
    { 
     "id": "2", 
     "amount": "20", 
     "startamount": "100", 
     "pct": "20,00", 
     "price": "164,83", 
     "stockvalue": "3296,60" 
    },...] 

элементов в моем списке являются объектами из моей Pojo статьи

public class Article implements IsSerializable { 
    private String id; 
     private String amount; 
     private String startamount; 
     private String pct; 
     private String price; 
     private String stockvalue; 

     public Article(){ 

     } 

     //Setter & Getter 
} 

Как я могу создать с поможет Gson JSON-строка, подобная той, что JSON-Lib создаст (JSONObject с JSONArray, который включает JSONObjects). В будущем строка JSON будет/должна быть расширена с помощью большего количества массивов (а не статей, но других вещей).

Я извлекаю эту сгенерированную строку JSON из HttpServlet. Имеет смысл десериализовать Gson JSON String обратно в ArrayList или использовать типы GWT JavaScript Overlay?

Благодаря & BR, mybecks

ответ

2

Это происходит потому, что вы даете Gson список объектов. Поэтому, если вы хотите иметь тот же результат, что и в первом фрагменте json, вам нужно определить объект, в котором будет храниться список статей. Например. :

public class ArticlesResult { 
    private List<Article> articles; 


    ...//the rest of the code, like getters and setters 
} 

Относительно преобразования JsArray в ArrayList. Это зависит от того, в большинстве случаев лучше использовать типы оверлей, поскольку они быстрее создаются и имеют небольшой след в сгенерированном JS-коде. Но это правда только для режима производства. В devmode типы наложения медленнее, поэтому, если вы быстро получаете доступ к типам наложения, вы будете тратить много времени на это.

1

процитировать Gson User Guide:

Gson библиотека Java, которая может быть использована для преобразования объектов Java в их JSON представление.

Это означает, что вам необходимо предоставить полную структуру, которую вы хотите видеть в строке JSON в объектах Java, которые вы сериализуете в JSON.

В вашем случае вам необходимо обернуть список статей в bean-компоненте, у которого есть свойство «articles».

Если требуется построить динамические структуры, Gson, возможно, не лучший инструмент для вас. вы можете сравнить Gson с инструментами привязки XML, такими как JAXB. Структура компонента, используемая с JAXB, не должна изменяться во время выполнения.

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