2013-02-27 3 views
4

은 내가 SELECT SQL 쿼리를 실행하려고하고 그 후 나는 ResultSet을 통해 루프 필요하고 columns을 얻고 나는 그 columns 다시받은 데이터가 유효 JSON String인지 여부를 확인합니다.문자열이 유효한 JSON 문자열인지 확인하십시오.

여기서 columnsListArrayList이며 특정 테이블의 Columns의 모든 이름을 포함합니다.

ResultSet rs = preparedStatement.executeQuery(); 

while (rs.next()) { 
    for (String column : columnsList.split(",")) { 

     //check whether rs.getString(column) is a valid JSON String? 
     if(rs.getString(column).ISvalid_JSON_String()) { 

      System.out.println("Valid JSON String data") 
     } 
    } 
} 

각 열에 대한 데이터가 올바른 JSON String인지 여부를 어떻게 확인해야합니까?

의견이 있으십니까?

+1

참조 http://stackoverflow.com/questions/10174898/how-to-check-whether-the-given-string-is-valid-json-or-not-in-java –

답변

2

정말 유효한 JSON인지 확인해야하는 경우 구문 분석이 필요합니다. 내가 좋아하는 빠르고 간단하고 가벼운 파서는 json-simple입니다. 그들의 예를 여기서보십시오.

http://code.google.com/p/json-simple/wiki/DecodingExamples#Example_2_-_Faster_way:_Reuse_instance_of_JSONParser

는 코드를 적응 내가 얻을 : 나는 큰 파일을 처리에서 그것의 좋은 잭슨 라이브러리를 사용하여 선호

JSONParser parser = new JSONParser(); 
ResultSet rs = preparedStatement.executeQuery(); 

while (rs.next()) { 
    for (String column : columnsList.split(",")) { 
     //check whether rs.getString(column) is a valid JSON String? 
     try{ 
      parser.parse(rs.getString(column)); 
      System.out.println("Valid JSON String data"); 
     } catch (ParseException e) { 
      System.out.printlnn("Invalid JSON String data"); 
     } 
    } 
} 
+0

구문 분석하지 않으려 고합니다. 유효한 JSON 문자열 유효한지 아닌지 확인하십시오. –

+0

당신의 정의는 무엇입니까? (대부분의 사람들은 파싱 할 수 있다는 의미로 유효하다고 생각합니다.) – Gus

+0

@FarhanJamal : 유효한지 알아보기 위해 구문 분석해야합니다. – Falmarri

1

.

import com.fasterxml.jackson.databind.ObjectMapper; 
    import java.io.IOException; 

    private Boolean isValidJson(String maybeJson){ 
     try { 
      final ObjectMapper mapper = new ObjectMapper(); 
      mapper.readTree(maybeJson); 
      return true; 
     } catch (IOException e) { 
      return false; 
     } 
    } 

이 접근 방식의 동작을 확인하기 위해 몇 가지 테스트를 작성했습니다.

Assert.assertThat(isValidJson("{\"token_type\":\"bearer\",\"access_token\":\"AAAA%2FAAA%3DAAAAAAAA\",\"scope\": \"scope of the token\",\"expires_in\": 200,\"refresh_token\":\"fdb8fdbecf1d03ce5e6125c067733c0d51de209c\"}"), Is.is(true)); 
    Assert.assertThat(isValidJson("[ \"Ford\", \"BMW\", \"Fiat\" ]\n"), Is.is(true)); 
    Assert.assertThat(isValidJson(""), Is.is(false)); 
    Assert.assertThat(isValidJson("Lachlan"), Is.is(false)); 
    Assert.assertThat(isValidJson("{ key: value }"), Is.is(false)); 

이 솔루션을 코드에 다시 통합하십시오. 저는 여러분이 동일한 클래스에 검증 코드를 넣을 것이라고 가정했습니다.

while (rs.next()) { 
    for (String column : columnsList.split(",")) { 
     String maybeJson = rs.getString(column) 
     //check whether rs.getString(column) is a valid JSON String? 
     if(isValidJson(maybeJson)) { 
      System.out.println("Valid JSON String data") 
     } 
    } 
} 

값과 원하는 동작에 따라 null 검사를 추가하는 것이 좋습니다.

관련 문제