我有这样的数据:
新闻项目:
可能有许多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...
{"1":["id","title","date","txt"],"2":[......and so on...
这是正确的方法吗?
如何解析此字符串,以便可以在jQuery中获取每个新闻项对象,以便可以访问attr。
像这样:
obj.id, obj.title
或者,如果这是创建JSON字符串的错误方法,请提出一些更好的方法,并以jQuery分析为例。
我相信您正在反向整理数据。似乎您想使用的数组NewsItems,如果这样,则您的Java JSON生成代码应如下所示:
NewsItems
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获取者返回Strings。JSONObject方法也put被重载以采用原始类型,因此,例如,如果您getId返回int,则它将作为裸JSON添加int。我假设JSONObject.put(String, Object)调用toString该值,但是我无法验证这一点。
Strings
put
getId
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