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

4
我尝试执行一个SELECT SQL查询,然后需要循环遍历ResultSet并获取,检查这些的数据是否为有效的JSON字符串。在这里,columnsList是一个ArrayList,它将包含特定表的所有名称。
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字符串?

有什么想法吗?


1
请见 https://dev59.com/Emkw5IYBdhLWcg3wDWPL。 - Mike Q
2个回答

3
如果您需要确保它是有效的JSON,您需要解析它。我喜欢的快速、简单、轻量级解析器是json-simple。请看他们的示例这里
根据您的代码改编,我得到了:
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");
        }
    }
}

我不打算解析有效的JSON字符串,只是想检查它是否有效。 - user1813228
你对“有效”的定义是什么?(大多数人认为有效意味着可以解析) - Gus
@FarhanJamal:你必须解析它才能知道它是否有效。 - Falmarri
1
这个验证 { key: value },但它不是有效的 JSON。 - Pratapi Hemant Patel
1
@HemantPatel 我提供了一个解决方案,正确地识别了这个无效的 JSON。 - Lance

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接