使用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.id
或obj["id"]