2015-03-23 4 views
1

Я использую gson library и Mustach.js шаблон двигателя. Я передаю коллекцию продуктов на страницу jsp.Как назвать массив объектов JSON с помощью GSON?

Теперь я использую следующий код:

Collection<Product> products = productDAO.findAll(); 
    Gson gson = new Gson(); 
    JsonElement element = gson.toJsonTree(products, 
      new TypeToken<Collection<Product>>() { 
      }.getType()); 
    JsonArray jsonArray = element.getAsJsonArray(); 
    HttpServletResponse response = ServletActionContext.getResponse(); 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    PrintWriter writer = response.getWriter(); 
    writer.print(jsonArray); 

он генерирует следующий вывод JSON:

[{"name":"Ut Nisi A PC","price":1133.43,"storeId":1,"id":2}, 
{"name":"Ipsum Dolor Sit Company","price":967.45,"storeId":1,"id":3}, 
{"name":"Ligula Limited","price":156.66,"storeId":1,"id":100}] 

То, что я хочу, чтобы назвать массив:

{ 
    "products": 
    [{"name":"Ut Nisi A PC","price":1133.43,"storeId":1,"id":2}, 
    {"name":"Ipsum Dolor Sit Company","price":967.45,"storeId":1,"id":3}, 
    {"name":"Ligula Limited","price":156.66,"storeId":1,"id":100}]} 

Так то в jsp для шаблона Mustache.js я могу ссылаться на массив вроде:

<div id="container"></div> 

    <script id="products-template" type="text/mustache-template"> 
     {{#products}} 
      <li>{{name}},{{price}}</li> 
     {{/products}} 
    </script> 
    $.ajax({ 
      type : 'GET', 
      dataType : 'json', 
      url : 'product/upload_products', 
      success : function(products) { 
       var template = $('#products-template').html(); 
       var info = Mustache.render(template, products); 
       $('#container').html(info); 
      } 
     }) 
    </script> 

Каким образом использование библиотеки GSON может быть достигнуто?

+0

@SotiriosDelimanolis извините, забудьте о скобках. Я редактирую код – marknorkin

ответ

1

Просто создайте новый JsonObject и добавить поле

JsonObject object = new JsonObject(); 
object.add("products", jsonArray); 

затем записать этот объект в ответ.

+0

Я пробовал ваше решение, и оно работает. спасибо – marknorkin

0

Использование JsonObject. Так,

JsonObject jsonObject = new JsonObject(); 
jsonObject.add("products", jsonArray); // jsonObject has the add method not put. 
+0

этот код выглядит плохо, хотя он может работать, но, как вы можете видеть из вышеприведенных ответов, вы можете устранить избыточное создание карты и свести ее к двум строкам кода. – marknorkin

1

Ключ объекта Json всегда является строкой, но это значение может быть строка, логическое значение, числом, JSON массив, ....

Если у вас есть объект это массив, который вам нужно передать в jsonObject в значение и создать строковый ключ.

Управление jsonObject как HashMap. Чтобы сделать то, что вам нужно, сделайте put («products», yourJsonArrayObject) в новом объекте Json.

JsonObject yourNewObject = new JsonObject(); 
yourNewObject.put("products", yourJsonArrayObject); 
+0

Какой 'JsonObject' вы используете здесь? «JsonObject» Gson не имеет метода «put». –

+0

Я использую Джексона или Джеттинсона. –

+2

ОП спрашивает о Гсоне. Вы должны четко указать, что вы используете другую библиотеку. –

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