簡體   English   中英

使用JSONObject和JSONArray創建json字符串

[英]creating json string using JSONObject and JSONArray

我有這樣的數據:

新聞項目:

  • 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 gettor返回Strings put的JSONObject方法也被重載以采用原始類型,因此,例如,如果您的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

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"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM