我正在使用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
?
编辑:目前字符串是一个对象,但是如果我创建一个以String作为参数的方法来转换为jsonArray。我怎样才能将字符串验证为有效的json数组?
答案 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;
}