8

我有这样的数据:

新闻项目:

  • 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 解析示例提出一些更好的方法。

4

4 回答 4

20

我相信您正在向后组织数据。似乎您想使用 的数组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 获取器返回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
于 2012-07-20T21:25:04.957 回答
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
}
于 2012-07-20T21:22:32.370 回答
0

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

JSON.stringify(json_object)

反向使用:

JSON.parse(json_string)
于 2012-07-20T21:21:07.117 回答
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"]

于 2012-07-20T21:21:52.980 回答