2012-07-20 84 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 
}