2011-08-28 59 views
1

我使用org.json lib來解析我的JSON字符串。我的json字符串來自輸入流。我從輸入流中讀取json字符串並將其傳遞給JSONObject()構造函數。 但我發現了以下異常:文本必須以'{'錯誤解析Java中的JSON開頭

[2011-08-28 23:42:52,235] main INFO - Task(): input = "{\"keyword\":\"xxxx"}" [2011-08-28 23:42:52,238] main ERROR - Task(): Exception: A JSONObject text must begin with '{' at 1 [character 2 line 1]

我想這個問題是多餘的雙引號,在我input"。 當我使用new JSONObject("{\"keyword\":\"xxxx"}");時,它工作正常。

++++ UPDATE ++++

這裏是我的JSON字符串的閱讀代碼:

try { 
     in = new InputStreamReader(new BufferedInputStream(is)); 

     int c; 
     while (true) { 
      c = in.read(); 
      if (c == '\r' || c == '\n') 
       break; 
      requestLine.append((char) c); 
     } 

    } catch (Exception e) { 
     logger.error("Task(): Exception: "+e.getMessage()); 
    } 
    input = requestLine.toString(); 
    //input = "{\"keyword\":\"xxxx\"}"; //working fine 
    logger.info("Task(): input = "+input); 
    try{ 
     org.json.JSONObject json = new org.json.JSONObject(input);  
     keyword = json.getString("keyword"); 
    }catch(Exception e) { 
     logger.error("Task(): Exception: "+e.getMessage()); 
    } 


    logger.info("Task(): keyword = "+keyword); 
+1

結尾的引號解決了這個*你如何閱讀和記錄字符串?顯示讀取輸入的代碼和導致INFO輸出的代碼。 – delnan

+0

嗨@delnan,我已更新我的問題,請檢查一次。 –

+0

嗯,我看到是什麼導致了這個異常,但你已經猜到了。你的字符串包含不應該在那裏的引號,並且除非'requestLine'是某種類型在它收集的字符串周圍奇蹟般地加上了引號,否則這些引號是誰給你的程序輸入的錯誤。如果引號確實在輸入中,則輸入是無效的JSON,並且您的代碼無法執行任何操作(除非試圖繞過它)。 – delnan

回答

1

我已經消除了領先,並通過 input = input.replaceAll("^\"|\"$", "");

相關問題