2016-07-24 2 views
0

문자열 json 문자열을 갖도록하겠습니다.simle json 파서를 사용하여 Java에서 JSON 구문 분석 오류가 발생했습니다.

{"cond":{"to_email":"[email protected]"},"ret":"all"} 

이제 자바의 json 간단한 파서를 사용하여 구문 분석하고 싶습니다.

내가 코드를 제공하고

...

try{ 
      //String s=request.getParameter("data"); 
      String s="{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}"; 
      JSONParser jsp=new JSONParser(); 

      if(s == null || s.equals("")){ 
       //problem 
       String json="{\"error\":\"error\",\"message\":\"no json data\"}"; 
       response.getWriter().println(json); 
      }else{    
       JSONObject obj=(JSONObject) jsp.parse(s); //only object is allowed 

       JSONObject condObj=(JSONObject) jsp.parse(""+obj.get("cond")); 
       JSONObject returnObj=(JSONObject) jsp.parse(""+obj.get("ret")); 

       System.out.println(condObj);      
      } 

지금 문제가이 오류를주고 있다는 것입니다 ...

Unexpected character (a) at position 0. 

하지만 난 "ret" : "all"는 다음 잘 작동하고 제거합니다.

여기 예제에서는 condObj 만 인쇄했지만 retObj를 인쇄하면 null이 표시됩니다. 문제는 "ret" : "all" 부분입니다 ...

하지만 올바른 json입니다. 나는 그것을 검사했다. 이 문제를 해결하는 방법 ??

답변

1

것은 매우 간단합니다! "cond"키는 복잡한 JSONObject를 나타내지 만 키는 "문자열"만 반환합니다. 따라서이 경우 구문 분석이 실패합니다. 어떤 JSON-libary를 사용하고 있는지 모르지만 JSONObject # getString (String key) 메서드를 사용하여 값을 가져온다.

 try{ 
     //String s=request.getParameter("data"); 
     String s="{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}"; 

     if(s == null || s.equals("")){ 
      //problem 
      String json="{\"error\":\"error\",\"message\":\"no json data\"}"; 
     }else{    
      JSONObject obj= new JSONObject(s); 

      JSONObject condObj=(JSONObject) obj.getJSONObject("cond"); 
      String returnObj= obj.getString("ret"); 

      System.out.println(condObj);  
      System.out.println(returnObj); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

당신을 감사합니다! 작동하고있어. –

1

바로 위의 대답은 다음과 같은 행운을 빌어 요 (내가 사용하는 JSON lib 디렉토리 포함)

UPDATE, 여기에 간단한 파서이다.

import java.util.Set; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 


public class ParseJson { 

    public static void main(String[] args) throws Exception { 
     String s = "{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}"; 
     JSONParser jsp = new JSONParser(); 
     if (s == null || s.equals("")) { 
      String json = "{\"error\":\"error\",\"message\":\"no json data\"}"; 
     } else { 
      JSONObject obj = (JSONObject) jsp.parse(s); 
      JSONObject condObj = (JSONObject) jsp.parse("" + obj.get("cond")); 
      Set<String> keys = obj.keySet(); 

      for (String key : keys) { 
       System.out.println("Key : " + key); 
       System.out.print("Value : " +obj.get(key)); 
       System.out.println(); 
      } 
     } 
    } 
} 

이렇게하면 키 쌍과 값 쌍이 모두 인쇄됩니다. 특정 키에 대한 조건문을 추가 할 수 있습니다. 키 : 값을 복귀 : 모든 키 설명 : cond 값 : { "to_email": "[email protected]"}

관련 문제