2011-08-28 55 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("^\"|\"$", "");

相关问题