2016-02-16 3 views
1

Im довольно новый с json, поэтому я не понимаю, что я m doing wrong.. I want my data json output like this, but i м, не получая это хорошо.JsonArray выход не работает

{ "data": [ 
    ["2014-01", 71173], 
    ["2014-02", 57624], 
    ["2014-03", 64851], 
    ["2014-04", 60486], 
    ["2014-05", 60500], 
    ["2014-06", 62908], 
    ["2014-07", 64818], 
    ["2014-08", 59961], 
    ["2014-09", 58542], 
    ["2014-10", 22050] 
    ] } 

Это то, что я получаю:

{ "data": [ 
"hallo 0", 
"hallo 10", 
"hallo 20", 
"hallo 30", 
"hallo 40", 
"hallo 50", 
"hallo 60", 
"hallo 70", 
"hallo 80", 
"hallo 90" ] } 

Это класс для данных с именем TestTest

public class TestTest { 

    @JsonProperty("data") 
    private List<List<Object>> data = new ArrayList<List<Object>>(); 

    public TestTest(){ 

    } 

    @JsonProperty("data") 
    public List<List<Object>> getData() { 
     return data; 
    } 

    @JsonProperty("data") 
    public void setData(List<List<Object>> data) { 
     this.data = data; 
    } 

} 


    @GET 
    @Path("/CallsPerMinuteAsLineChart") 
    public Response getTest(){ 
     TestTest test = new TestTest(); 
     List<List<Object>> data = new ArrayList<List<Object>>(); 

     int loop; 

     for(loop=0; loop < 100; loop = loop + 10){ 
      List<Object> dataitem = new ArrayList<>(); 
      dataitem.add("hallo"); 
      dataitem.add(loop); 
      data.add(dataitem); 
     } 

     test.setData(data); 
     return Response.ok(test).build(); 
    } 

ответ

1

проблема не о вашей структуре JSon, хотя это не хорошая практика для создания такого вложенного списка, я пробовал код с Gson и Jackson

 TestTest test = new TestTest(); 
     List<List<Object>> data = new ArrayList<List<Object>>(); 

     int loop; 

     for(loop = 0; loop < 100; loop = loop + 10){ 
      List<Object> dataitem = new ArrayList<>(); 
      dataitem.add("hallo"); 
      dataitem.add(loop); 
      data.add(dataitem); 
     } 

     test.setData(data); 

     ObjectMapper mapper = new ObjectMapper(); 
     String jackson = mapper.writeValueAsString(test); 

     System.out.println(new Gson().toJson(test)); 
     System.out.println(jackson); 

Этот код печатает:

{"data":[["hallo",0],["hallo",10],["hallo",20],["hallo",30],["hallo",40],["hallo",50],["hallo",60],["hallo",70],["hallo",80],["hallo",90]]} 
{"data":[["hallo",0],["hallo",10],["hallo",20],["hallo",30],["hallo",40],["hallo",50],["hallo",60],["hallo",70],["hallo",80],["hallo",90]]} 

Какой именно то, что вы хотите. Поскольку никто явно не решить вашу проблему, не зная всех деталей, я предлагаю вам использовать его так:

@GET 
@Path("/CallsPerMinuteAsLineChart") 
public String getTest(){ 

И в этом методе просто возвращает строку JSON, как я преобразовал их.

+0

Спасибо, это работает –

0
List<Object> dataitem = new ArrayList<>(); 
     dataitem.add("hallo"); 
     dataitem.add(loop); 
     data.add(dataitem); 

в коде выше вы добавляете в объект один объект (dataitem), и это то, что вы видите на выходе. Предлагаю, а не в списке либо использовать объект (ключ Strung, строка VAL) тип или карту (K, V) - Возможные варианты

1. User Map 
     Map<String, Object> dataitem = new HashMap<String, Object>(); 
Iterate the map and print object properties. 
2. List of Object - where Object can have id and value as attribute that you print. 
     List<Object> dataitem = new ArrayList<Object>(); 
or Simply 
3. Map<String, String> dataitem = new HashMap<String, String>(); 
Pring k.V for map 
0

Хороший способ решить эту проблему путем создания сериализуемые объектов, например,

public class Item { 

    private String label; 
    private int value; 

    public Item() { 

    } 

    public Item(String label, int number) { 
     this.label = label; 
     this.number = number; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 

    public int getLabel() { 
     return label; 
    } 

    public void setNumber(int number) { 
     this.number = number; 
    } 

    public int getNumber() { 
     return number; 
    } 
} 

public class Data { 

    private List<Item> items; 

    public Data() { 
     items = new ArrayList<>(); 
    } 

    public void setItems(List<Item> items) { 
     this.items = items; 
    } 

    public List<Item> getItems() { 
     return items; 
    } 

    public void addItem(Item item) { 
     items.add(item); 
    } 
} 

Ваш метод:

@GET 
@Path("/callsperminuteaslinechart") 
public Response getTest(){ 
    Data data = new Data(); 

    for (int i = 10; i <= 100; i += 10) { 
     data.addItem(new Item("Hello", i)); 
    } 

    return Response.ok(data).build(); 
} 
0

Разделение, что я сделал, что я думаю, рядный с тем, что другие разделяют передо мной.

package general; 

import java.util.ArrayList; 
import java.util.List; 

import org.json.JSONObject; 

public class GenerateJSONout { 

public static void main(String[] args) { 

    List<List<Object>> data = new ArrayList<List<Object>>(); 

    int loop; 

    for(loop = 0; loop < 100; loop = loop + 10){ 
     List<Object> dataitem = new ArrayList<>(); 
     dataitem.add("hallo"); 
     dataitem.add(loop); 
     data.add(dataitem); 
    } 


    JSONObject jo = new JSONObject();  
    jo.put("data", data); 

    System.out.println(jo.toString()); 
} 

} Результат:

{"data":[["hallo",0],["hallo",10],["hallo",20],["hallo",30],["hallo",40],["hallo",50],["hallo",60],["hallo",70],["hallo",80],["hallo",90]]} 
+0

Это не ответ, что этот человек просит. –

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