2010-08-05 2 views
12

서블릿의 HttpServletRequest에서 JSONObject을 얻으려면 어떻게해야합니까?String에서 JSONObject 가져 오기

+2

검색 한 결과, 읽었습니까? – BoltClock

+5

무엇'JSONObject'? – Bozho

+0

@Bozho는 좋은 지적입니다. Java 용 JSON 라이브러리가 많이 있으며 그 중 많은 클래스가 해당 클래스 이름을 사용하기를 기대합니다. –

답변

17

매우 간단합니다 :

JSONObject o = new JSONObject(request.getParameter("WHATEVER")); 

편집 : 당신이 JSON-lib 디렉토리를 사용하기 때문에, 그것은 당신을 위해

JSONObject o = (JSONObject) JSONSerializer.toJSON(request.getParameter("WHATEVER")); 

을합니다.

+3

JSONObject에 문자열 인수가있는 생성자가 없습니다. 사용중인 API는 무엇입니까? –

+0

json.org의 JSON 라이브러리를 사용하고 있습니다. –

0

GSON은 Java 기반의 JSON 라이브러리로서 매우 유용합니다.

+0

GSON 좋은 진짜 좋은 lib –

1

JSONObject(java.lang.String)을 참조하십시오. 유효한 JSON 인 String을 전달하는 경우 JSONObject 객체가 생성됩니다. 생성자는 JSONException을 던집니다. 그래서 처리해야합니다. 잘못된 JSON을 보내는 경우에도 마찬가지입니다.

정말 어떤 일을하는지에 따라 다릅니다. 대부분 JSONObject는 bean getter를 사용하여 JSON 객체를 생성합니다 (bean을 생성자에 전달하는 경우). 그렇지 않으면 이름의 String 배열과 함께 객체를 전달할 수 있습니다. 여기에서 JSONObject은 리플렉션을 사용하여 객체의 public 멤버를 찾습니다. 그런 다음이 객체에 대한 키로 제공 한 이름을 사용합니다.

JSONObject은 아무런 문제없이 Map 유형의 항목을 처리합니다. 그러나 개체가 List 인 경우 JSONArray을 사용해야합니다. 또 다른 문제는 이 포함 된 Map 인 경우입니다. 그런 다음 어떤 이유에서 JSONObjectList이라는 것을 알 수 없으며 원하는 문자열이 아닌 List의 표준 문자열 표현을 사용합니다. 이를 처리하는 유일한 방법은 Map을 반복하고 JSONObject을 수동으로 작성하는 것입니다.

지금까지 귀하의 질문에, 당신은 JSON을 반환합니다 행동을 가진 서블릿이 있다고 가정합니다. 이 경우 새 JSONObject을 만들고 PrintWriter ~ 및 jsonObject.toString()을 사용하여 JSON을 출력하십시오.

0

조금만하고 있습니다. 어려운 방법. 분명히 이것을 할 수있는 방법이 있습니다. JSON이 아닌 일반적인 요청 매개 변수로 보내면됩니다. jQuery.serialize()을 사용하여 모든 양식 필드를 매개 변수로 수집 할 수 있습니다. 다음은 JSP가 같이 방법의 킥오프 예 : 그것은 거 jQuery form 플러그인

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    System.out.println(username + "," + password); 
    response.getWriter().write("OK"); // You can write JSON string here. 
} 

: 여기

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Test</title> 
     <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
     <script> 
      $(document).ready(function() { 
       $('#form').submit(function() { 
        $form = $(this); 
        $.post($form.attr('action'), $form.serialize(), function(response) { 
         alert(response); // "OK" 
        }); 
        return false; 
       });   
      }); 
     </script> 
    </head> 
    <body> 
     <form id="form" action="register" method="post"> 
      <input type="text" name="username"> 
      <input type="password" name="password"> 
      <input type="submit"> 
     </form> 
    </body> 
</html> 

는 그리고는 url-pattern/register/*의 수신 대기 서블릿이 같이 할 수있는 방법입니다 더 투명해질 수 있습니다. 당신이 진짜 JSON 데이터를 반환하는 경우


  $(document).ready(function() { 
       $('#form').ajaxForm(function(response) { 
        alert(response); // "OK" 
       });   
      }); 

jQuery를 다시 서블릿에서 대응하기가 쉽다.jQuery를에

Map<String, Object> data = new HashMap<String, Object>(); 
if (userDAO.exist(username)) { 
    data.put("success", false); 
    data.put("message", "Username in use, please choose another"); 
} else { 
    userDAO.create(username, password); 
    data.put("success", true); 
    data.put("message", "User successfully registered"); 
} 
response.setContentType("application/json"); 
response.getWriter().write(new Gson().toJson(data)); // Gson = Google Gson. 

다음 : 예를 들어 당신이 된 JSONObject net.sf.json.JSONObject 버전 (이것은 json.org 버전되지 않습니다) 사용하고 있어야합니다 같은

 $(document).ready(function() { 
      $('#form').ajaxForm(function(data) { 
       $('#message').addClass(data.success ? 'success' : 'error').text(data.message).show(); 
      });   
     }); 
+1

질문은 jQuery 또는 자바 스크립트 전혀 관련이없는,이 답변은 구약입니다. –

2

보인다.

obj이 getter 및 setter와 하나

  • 유효한 JSON 형식의 문자열
  • Bean에 POJO이다 어디 net.sf.json.JSONObject 버전은 단순히

    JSONObject.fromObject(Object obj) 
    

    을 사용하십시오.

관련 문제