2012-03-21 3 views
1

웹 사이트의 JSON 응답을 데이터베이스에 저장하려고합니다. 늦게 나는이 JSON 문자열에 액세스하여 데이터를 처리하고있다. 하지만 JSON 개체로 구문 분석 할 수 없습니다. 나는 문자열의 문자가 이스케이프되어야한다는 것을 깨닫습니다. 데이터를 문자열로 저장하므로 JSON 데이터로 돌아 오는 데이터 결과가 데이터베이스에서 이스케이프되지 않습니다. JSON 데이터를 데이터베이스에 저장할 수있는 방법이 있습니까? 예JSON 데이터를 데이터베이스에 저장하는 방법

:

{"RULE":[{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src="[^"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\s*</a>","type":"text"}},{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src="[^"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\s*</a>","type":"text"}}]} 

은 "및 \를 즉, (또한 응답을 받고)로 데이터베이스에 저장하려면 여기

{"RULE":[{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src=\"[^\"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\\s*</a>","type":"text"}},{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src=\"[^\"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\\s*</a>","type":"text"}}]} 

를 이스케이프 내가를 저장하는 데 사용했던 코드입니다 데이터베이스의 데이터

     // here the raw_data is the data from the website 
          JSONObject jo = new JSONObject(raw_data); 

      // Get the JSONObject value associated with the search result key. 
      jo = jo.getJSONObject("pipe"); 
         jo = jo.getJSONObject("definition"); 

          String def=jo.toString(); 

       JSONArray jo1=jo.getJSONArray("modules"); 
       JSONArray jo2=jo.getJSONArray("wires"); 

        /* 
        * Write the contents in the data base 
        * 
        *    
        */ 
        def =def.replaceAll("[']", "\\\\\'"); //creates problem for strings with ' 
        def =def.replaceAll("&", "%26"); 

        String tablename="PipesTable2"; 
        System.out.println(def); 
        database d=new database(); 
+1

웹 사이트에서 json이 포함 된 문자열을 보내고 있습니다. 해당 문자열에는 이미 이스케이프가 필요합니다. 그렇지 않다면받은 json은 읽을 수 없을 것입니다. 그래서 데이터를 받았을 때 당신은 무엇을하고 있습니까? 당신이받는 데이터를 이스케이프 (unescape)하기 위해 일부 json 라이브러리를 사용하고있는 것 같습니다. 동일한 라이브러리를 사용하여이를 다시 이스케이프 할 수 있습니다. –

+0

올바른 DB 작업을 사용하는 경우 DB에 저장하기 전에 문자열을 이스케이프 처리하지 않아도됩니다. 물론 JSON 값으로 사용하기 전에 (이상한) XML/HTML 문자열을 이스케이프 처리해야하지만 DB와는 별개입니다. –

+0

@ andrew 데이터베이스에 데이터를 저장하기 위해 작성한 코드를 추가했습니다. 실제로 나는 JSON 인 데이터를 문자열로 변환하고있다. (그 이유는 []와 같은 내용의 {}와 같은 내용을 대체해야하고 그 변환 된 문자열은 데이터베이스에 저장한다. – Judy

답변

1

Jackson (http://wiki.fasterxml.com/JacksonHome) Json 객체와 Java 객체 사이를 변환 할 수 있습니까? 그런 다음 표준 Java 지속성 도구와 라이브러리를 사용하여 데이터베이스에서 저장하거나 데이터베이스에서 읽을 수 있습니다. 그러면 자동으로 이스케이프 처리됩니다.

Jackson에는 Json과 Java 객체간에 변환하는 두 가지 주요 방법이 있습니다. 지속성을 위해 직접 JDBC 호출을 사용하려고 계획하고 있고 다른 많은 처리 작업을 수행하고 싶지 않다면 "간단한 데이터 바인딩"에서 벗어날 수 있습니다. 이것은 Json과 Java의 내장 유형 (List, Map, String, Boolean, Number) 사이에서 변환됩니다.

데이터에서 Java 처리를 계획하고 있거나 Hibernate와 같은 지속성 프레임 워크를 사용하려면 "전체 데이터 바인딩"이 필요합니다. 이것은 POJO와 주석을 사용하여 객체에보다 복잡한 구조를 제공합니다.

여기 두 옵션을 모두 커버하는 좋은, 아주 간결 튜토리얼이있다 : http://wiki.fasterxml.com/JacksonInFiveMinutes

+0

감사드립니다. 나는이 도서관을 보지 않았다. 또한 몇 가지 예를 안내해 줄 수 있습니까? 정말 도움이 될 것입니다. – Judy

2

난 당신이 JSON에 매핑 속성을 가진 클래스를 생성하는 것이 좋습니다는. 제 3 자 도구를 사용하여 객체를 json 또는 json으로 변환 할 수 있습니다 .Gson을 사용할 수 있습니다.

이제 josn을 얻을 때이 json을 객체로 변환하고 해당 객체의 속성을 데이터베이스에 저장할 수 있습니다. 값을 검색 할 때이 값을 객체의 속성으로 설정 한 다음이 객체를 json으로 변환합니다.

현재 GSON을 찾을 수 있습니다 - http://code.google.com/p/google-gson/

이 사용하기 쉽습니다.

관련 문제