检查String是否是有效的JSON字符串?

时间:2013-02-27 23:12:16

标签: java json string resultset

我正在尝试执行SELECT SQL查询,然后我需要遍历ResultSet并获取columns并检查我为这些{{1}获取的数据是有效columns或不是。

此处JSON StringcolumnsList,其中包含特定表格的ArrayList的所有名称。

Columns

我不确定应该如何检查每个列的数据是否都是有效的JSON字符串?

有什么想法吗?

2 个答案:

答案 0 :(得分: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");
        }
    }
}

答案 1 :(得分:1)

我更喜欢使用Jackson库来处理大文件。

   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")
        }
    }
}

考虑根据什么值和所需行为添加空检查。