我对json很新,所以我不明白我m doing wrong..
I want my data json output like this, but i
没有把它变好。
{ "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();
}
答案 0 :(得分: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字符串。
答案 1 :(得分: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
答案 2 :(得分: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();
}
答案 3 :(得分: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]]}