2011-08-28 9 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

안녕하세요 @ 델 난, 내 질문을 업데이 트했습니다, 한 번 확인하십시오. –

+0

글쎄, 나는 예외의 원인을 알고 있지만, 당신은 이미 자신을 추측했다. 문자열에는 거기에 있어서는 안되는 따옴표가 포함되어 있습니다.'requestLine'이 수집하는 문자열 주위에 마술처럼 따옴표를 추가하는 형식이 아닌 한, 그 따옴표는 프로그램에 입력 한 사람의 잘못입니다. 따옴표가 실제로 입력에 있으면 입력은 유효하지 않은 JSON이고 코드는 (해킹을 시도하는 것을 제외하고) 아무 것도 할 수 없습니다. – delnan

답변

1

내가 선도를 제거하고 input = input.replaceAll("^\"|\"$", "");

관련 문제