如何在 Java 中验证字符串是不是为 JSON?

Posted

技术标签:

【中文标题】如何在 Java 中验证字符串是不是为 JSON?【英文标题】:How to validate a string is JSON or not in Java?如何在 Java 中验证字符串是否为 JSON? 【发布时间】:2017-06-10 13:00:07 【问题描述】:

我已经说过,我的问题不同...问题已经问过here,但我想要一个 java 中的预定义方法,它检查给定字符串是否为 json 格式。

如果没有预定义的方法,那么至少告诉代码是否检查 JSON 格式,而不使用 try catch 块..

提前谢谢...

【问题讨论】:

try-catch 有什么问题? 使用try-catch 可以轻松完成,如图here。 How to check whether a given string is valid JSON in Java的可能重复 【参考方案1】:
public boolean isValidJson(String jsonStr) 
    Object json = new JSONTokener(jsonStr)).nextValue();
    if (json instanceof JSONObject || json instanceof JSONArray) 
      return true;
     else 
      return false;
    

只需在此函数中传递任何字符串。

【讨论】:

var jsonStr 没有出现在函数体中 刚刚修复了变量命名。感谢提及 我认为这个需要一些改进。下面的示例返回 true,例如 "名称" : mkj123 mk 【参考方案2】:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;    
/**
         * 
         * @param inputJosn
         * @return
         * @throws IOException 
         * @throws JsonParseException 
         * @throws JsonProcessingException
         */
        private static boolean isJsonValid(String inputJosn) throws JsonParseException, IOException  
            ObjectMapper mapper = new ObjectMapper();
            mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
            JsonFactory factory = mapper.getFactory();
            JsonParser parser = factory.createParser(inputJosn);
            JsonNode jsonObj = mapper.readTree(parser);
            System.out.println(jsonObj.toString());


            return true;
        

【讨论】:

【参考方案3】:

从字符串中使用 JSONObject 的构造函数

    try 
        JSONObject o = new JSONObject(yourString);
     catch (JSONException e) 
        LOGGER.error("No valid json");
    

【讨论】:

有什么方法吗?哪个不使用 try catch 块? AFAIK 这是更好的方法,您可以构建一个包含该块的方法以避免编写多个catch。根据您的要求可以接受吗? 感谢您的回复。我只是不想使用 try catch 块。就像在javascript中一样,我们有一个预定义的函数来验证字符串是否为json..所以我认为java中有什么东西可以自动检查有效的json..我想要boolean jsIsValid=method(string); @edsheeran 首先,Java 不是 JavaScript。处理它。甚至in JavaScript you are supposed to use try-catch.

以上是关于如何在 Java 中验证字符串是不是为 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

java验证字符串是不是为数字

java中将map转成json时,如何将map中的整型数字在转成json后,变成字符串,而不是整型。

判断json对象是不是为空()

Java + BigQuerie 如何获取正确的 JSON 而不是一些 FieldValues 列表?

判断字符串是否json字符串

java中json对象有没有方法可以把null值转换成空字符串