如何验证给定的字符串是使用net.sf.json库的有效JsonArray

时间:2013-08-14 10:11:14

标签: java json arrays

我正在使用net.sf.jsonjson To java,反之亦然转换

我有一个以下字符串:

String jsonStr = "{\"name\" : \"abc\",\"address\"  : \"def\"}";    // line 1

我尝试使用以下代码验证上面的字符串是有效的json数组:

JSONArray arr = JSONArray.fromObject(jsonStr);      // line 2
System.out.println(arr.isArray());       // line 3

但我在第2行得到以下 例外

Exception in thread "main" net.sf.json.JSONException: A JSONArray text must start with '[' at character 1 of {"name" : "abc","address"  : "def"}
    at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:527)
    at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:1146)
    at net.sf.json.JSONArray._fromString(JSONArray.java:1226)
    at net.sf.json.JSONArray.fromObject(JSONArray.java:151)
    at net.sf.json.JSONArray.fromObject(JSONArray.java:129)
    at com.example.WsClient.main(WsClient.java:2) // 

现在JSONArray类中没有静态方法来验证它是有效的json字符串,所以我必须创建一个json数组然后验证它。但我在创建数组时遇到异常。 那我该如何使用这种方法呢?

如何验证上面的字符串是valid json Array

编辑:目前字符串是一个对象,但是如果我创建一个以String作为参数的方法来转换为jsonArray。我怎样才能将字符串验证为有效的json数组?

2 个答案:

答案 0 :(得分:2)

来自net.sf.json.JSONArray.fromObject() docu:

  

抛出:JSONException - 如果对象无法转换为正确的对象   JSONArray

所以你已经通过异常验证了你的字符串,并且你知道这不是一个JSON有效的数组字符串。如果您将此JSON字符串作为方法参数,则可以重新抛出异常(通过您的方法),或在本地处理(通过返回null)。

isArray()方法是JSON实现的接口JSONArray的一部分。

  

boolean isArray()             如果此对象为true,则返回JSONArray,否则返回false

我希望你以后可以调用它,如果你有实际有效的解析JSON数组,并且你的对象是JSONArray

我想说的是,如果此字符串有效,则不需要特殊检查。你有两个解决方案:

public XXX parseYourString(String json) throws net.sf.json.JSONException {
    JSONArray arr = JSONArray.fromObject(json);
    // do something with arr and return custom result
}

或:

public XXX parseYourString(String json) {
    XXX xxx = new XXX();
    try {
          JSONArray arr = JSONArray.fromObject(json);

          // do something with arr

    } catch (JSONException ex) {
        return null;
    }
    return xxx;
}

答案 1 :(得分:0)

您可以这样检查:

public boolean isValid(String jsonString)
{
    boolean valid = false;
    try {
        JSONArray.fromObject(jsonString)
        valid = true;
    }
    catch(JSONException ex) { 
        valid = false;
    }
    return valid;
}