Создайте конкретную строку JSON с помощью Gson - PullRequest
1 голос
/ 08 февраля 2012

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

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 String будет / должен быть расширен за счет большего количества массивов (не статей, а прочего).

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

Спасибо & BR, mybecks

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

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

public class ArticlesResult {
   private List<Article> articles;


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

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

1 голос
/ 08 февраля 2012

Цитируя Руководство пользователя Gson :

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

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

В вашем случае вам нужно обернуть список статей вbean-компонент, имеющий свойство "article".

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

...