使用JSONObject和JSONArray创建json字符串

我有这样的数据:

NewsItem:

  • ID
  • 标题
  • 日期
  • 文本

可能有很多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中的解析示例提出一些更好的方法。

我相信你正在向后组织你的数据。 您似乎想要使用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 ,但我无法validation这一点。

现在在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 

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 } 

用于将JSON对象转换为JSON字符串使用

 JSON.stringify(json_object) 

反向使用:

 JSON.parse(json_string) 

这是正确的方法 –

 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.idobj["id"]