簡體   English   中英

將JSON對象解析為Java中的字符串

[英]Parse JSON object to string in java

我是json解析的新手,我從請求中獲取了一個json字符串,現在我需要使用java解析它。 我為此使用simple-lib。 但是由於我不熟悉它,所以我真的很困。 我需要提取以下數據

我為此使用了以下Java代碼,但它沒有給我所需的結果,請有人幫助我...

    JSONParser parser = new JSONParser();

    try {
        Object obj = parser.parse(new FileReader("test.json"));

        JSONObject jsonObject = (JSONObject) obj;

        JSONArray msg = (JSONArray) jsonObject.get("content");
        Iterator<String> iterator = msg.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());

        }

樣本JSON

{
    "status": 200,
    "message": "ok",
    "timestamp": "2014-05-22T14:29:56.824+03:00",
    "pagesCount": 1,
    "version": "1.1",
    "pages": [
        {
            "number": 100,
            "subpages": [
                {
                    "number": 1,
                    "timestamp": "2014-05-22T13:41:41.116+03:00",
                    "content": "text"
                },

大概是這樣嗎?

JSONParser parser = new JSONParser();

JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("test.json"));
JSONArray pages = (JSONArray) jsonObject.get("pages");
if (pages != null) {
    for (Object p : pages) {
        JSONObject page = (JSONObject) p;
        JSONArray subPages = (JSONArray) page.get("subpages");
        if  (subPages != null) {
            for (Object sp : subPages) {
                JSONObject subPage = (JSONObject) sp;
                System.err.println(subPage.get("content"));
            }
        }
    }
}

您正在從最外面的對象請求與鍵content相對應的值,但樣本輸入中不存在這樣的鍵。 此外,唯一的名為content字段將字符串作為其值,而不是JSON數組。

要到達content字段,您需要使用以下幾行代碼來遍歷對象層次結構,直到到達所需的元素:

JSONParser parser = new JSONParser();

JSONObject json = (JSONObject) parser.parse(new FileReader("test.json"));
JSONArray pages = (JSONArray) json.get("pages");

// Page 10
JSONObject page = (JSONObject) pages.get(10);

// Subpages of page 10
JSONArray subpages = (JSONArray) page.get("subpages");

// Subpage 7 of page 10
JSONObject subpage = (JSONObject) subpages.get(10);

// Content of subpage 7 of page 10
String content = (String) subpage.get("content");

請注意,我假設索引10對應於第10頁。 頁面可能沒有被零索引,頁面可能丟失或順序不正確。 在這種情況下,您將必須遍歷頁面和子頁面列表,並測試number字段的值以找到所需的對象。

無論如何,如果確實使用json-simple ,那么JSONObjectHashMap的子類,而JSONArrayArrayList的子類。 因此,您對它們的界面應該非常熟悉。

免責聲明:未經測試的代碼-為簡潔起見,刪除了異常和其他錯誤處理

首先,json無效(如果粘貼完整),在JSON中,“ {}”是一個對象,“ []”是一個數組,其他只是鍵值對。 簡而言之,您無需使用解析器就可以這樣做,

JSONObject objResponseJSON = new JSONObject(responseJSONString);
int status = (int) objResponseJSON.getInt("status");
//fetch other
JSONArray pages = objResponseJSON.getJSONArray("pages");
for(int count = 0; count < pages.length(); count++){
   //fetch other
   JSONObject objJSON = pages.getJSONObject(count);
   JSONArray subpages = objJSON.getJSONArray("subpages");
   for(int count1 = 0; count1 < subpages.length(); count1++){
      JSONObject objSubpageJSON = subpages.getJSONObject(count1);
      //fetch other
      int number = (int) objSubpageJSON.getInt("number");
    }
}

暫無
暫無

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

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