2012-07-20 81 views
5

我有这样的数据JSON字符串:创建使用的JSONObject和JSONArray

NewsItem:

  • ID
  • 标题
  • 日期
  • TXT

可能有许多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的解析的一些更好的办法。

+2

downvoter:这里是你评论区.... – JAVAGeek 2012-07-20 21:21:58

回答

14

我相信你正在组织你的数据。看来你要使用的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 
+0

我如何遍历循环中的每个对象.... arr [0] .. arr [1]会好的,但如果我不知道项目的数量,那么我如何访问它们? – JAVAGeek 2012-07-20 21:29:43

+0

@JAVAGeek:JavaScript数组有一个'length'属性,请参阅编辑 – pb2q 2012-07-20 21:32:01

+0

谢谢!我想这正是我正在寻找的.. – JAVAGeek 2012-07-20 21:38:06

0

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

JSON.stringify(json_object) 

对于反向使用:

JSON.parse(json_string) 
+0

如果您使用JSON-简单,你可以使用toJSONString()方法 – sergiofbsilva 2012-07-20 23:28:03

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

+0

它不是obj.add(“”,“”);它是obj.put(“”,“”); – TechFind 2014-01-16 22:06:20

+0

的列表?我有2个字符串。 – user151968 2016-08-26 08:40:19

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 
}