我有这样的数据:
NewsItem:
可能有很多NewsItems说10.我必须将它们发送到jquery。
我这样做:
JSONObject obj = new JSONObject();
JSONArray arr = new JSONArray();
for(int i = 0 ; i< list.size() ; i++){
p = list.get(i);
arr.put(p.getId());
arr.put(p.getTitle());
arr.put(new MyDateFormatter().getStringFromDateDifference(p.getCreationDate()));
arr.put(getTrimmedText(p.getText()));
obj.put(""+i,arr);
arr = new JSONArray();
}
这将创建一个这样的JSON字符串:{"1":["id","title","date","txt"],"2":[......and so on...
这样做是否正确?
如何解析这个字符串,以便我可以在jQuery中获取每个新闻项对象,以便我可以访问attr。
像这样:
obj.id,
obj.title
或者,如果这是创建JSON字符串的错误方法,请以jQuery中的解析示例提出一些更好的方法。
答案 0 :(得分:19)
我相信您正在向后组织数据。您似乎想要使用NewsItems
数组,如果是这样,那么您的java JSON生成代码应该如下所示:
JSONObject obj = new JSONObject();
JSONArray arr = new JSONArray();
for(int i = 0 ; i< list.size() ; i++)
{
p = list.get(i);
obj.put("id", p.getId());
obj.put("title", p.getTitle());
obj.put("date". new MyDateFormatter().getStringFromDateDifference(p.getCreationDate()));
obj.put("txt", getTrimmedText(p.getText()));
arr.put(obj);
obj = new JSONObject();
}
现在你的JSON字符串看起来像这样:
[{"id": "someId", "title": "someTitle", "date": "dateString", "txt": "someTxt"},
{"id": "someOtherId", "title": "someOtherTitle", "date": "anotherDateString", "txt": "someOtherTxt"},
...]
假设您的NewsItem gettors返回Strings
。 JSONObject方法put
被重载以获取原始类型,因此,例如,您的getId
会返回int
,然后会将其添加为裸JSON int
。我假设JSONObject.put(String, Object)
在值上调用了toString
,但我无法验证这一点。
现在在javascript中,您可以直接使用这样的字符串:
var arr =
[{"id": "someId", "title": "someTitle", "date": "dateString", "txt": "someTxt"},
{"id": "someOtherId", "title": "someOtherTitle", "date": "anotherDateString", "txt": "someOtherTxt"}];
for (i = 0; i < arr.length; i++)
alert(arr[i].title); // should show you an alert box with each first title
答案 1 :(得分:1)
json对象的想法与字典/映射相同,你可以在其中为这些键分配键和值,因此你想要构造的东西是这样的:
{"1": {"title": "my title", "date": "17-12-2011", "text": "HELLO!"}, "2": ....}
其中“1”是id,内容是另一个带有信息的字典/地图。
假设您已将对象分配给名为 my_map 的变量,现在您可以将其处理为:
my_map.1.title
my_map.3.text
...
迭代它只需使用:
for (info in my_map){
data = my_map[info];
//do what you need
}
答案 2 :(得分:0)
要将JSON对象转换为JSON字符串,请使用
JSON.stringify(json_object)
反向使用:
JSON.parse(json_string)
答案 3 :(得分:0)
这是正确的方法 -
final JSONArray arr = new JSONArray();
for(int i = 0 ; i< list.size() ; i++) {
final JSONObject obj = new JSONObject();
p = list.get(i);
obj.add("id", p.getId());
obj.add("title", p.getTitle());
obj.add("date", new MyDateFormatter().getStringFromDateDifference(p.getCreationDate()));
obj.add("txt", getTrimmedText(p.getText()));
arr.add(obj);
}
这将生成
[{"id": 1, "date": 222, "title": "abc", "txt": "some text"}, {...}]
现在,当您在客户端解析json时,您可以迭代数组,并且可以访问每个json对象 -
obj.id
或obj["id"]