2

我正在使用net.sf.json库进行json 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

编辑:目前字符串是一个对象,但如果我创建一个以字符串为参数的方法以转换为 jsonArray。如何验证字符串是否为有效的 json 数组?

4

2 回答 2

2

来自net.sf.json.JSONArray.fromObject()文档:

抛出:JSONException- 如果对象不能转换为正确的 JSONArray.

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

isArray()方法是接口的一部分,JSONJSONArray.

boolean isArray()true如果此对象是 a 则 返回JSONArrayfalse否则返回。

如果你有真正有效的解析 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;
}
于 2013-08-14T10:22:34.360 回答
0

您可以像这样检查它:

public boolean isValid(String jsonString)
{
    boolean valid = false;
    try {
        JSONArray.fromObject(jsonString)
        valid = true;
    }
    catch(JSONException ex) { 
        valid = false;
    }
    return valid;
}
于 2013-08-14T10:24:32.110 回答