我正在尝试检测我的字符串是JSON对象还是JSON数组。 这是我的示例:
jsonObject = "{"key":"value1", "id":"1"}";
jsonArray = "[{"key":"value0", "id":"0"},{"key":"value1", "id":"1"}]"
已正确检测到JSON数组,但JSON对象不正确。 这是我的代码:
import com.jayway.jsonpath.Configuration;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
public class json {
public static void main(String[] args) {
String jsonObject = "{\"key\":\"value1\", \"id\":\"1\"}";
Object documentObject = Configuration.defaultConfiguration().jsonProvider().parse(jsonObject);
// Why is documentObject not recognized as an object?
if (documentObject instanceof JSONArray) {
System.out.println("jsonObject is JSONArray");
} else if (documentObject instanceof JSONObject) {
System.out.println("jsonObject is JSONObject");
} else {
System.out.println("jsonObject is UNKNOWN");
}
String jsonArray = "[{\"key\":\"value0\", \"id\":\"0\"},{\"key\":\"value1\", \"id\":\"1\"}]";
Object documentArray = Configuration.defaultConfiguration().jsonProvider().parse(jsonArray);
// jsonArray is recognized properly
if (documentArray instanceof JSONArray) {
System.out.println("jsonArray is JSONArray");
} else if (documentArray instanceof JSONObject) {
System.out.println("jsonArray is JSONObject");
} else {
System.out.println("jsonArray is UNKNOWN");
}
}
}
输出: jsonObject是未知的 jsonArray是JSONArray
怎么了?
答案 0 :(得分:1)
首先,正如@Henry指出的那样,如果要区分JSON对象和JSON数组,简单的方法是检查第一个非空白字符。
关于您的代码为何不起作用的原因,看来parse(jsonObject)
返回的是LinkedHashMap
的实例。至少这是我在以下版本中看到的内容:
<dependencies>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
事实证明,这是jayway jsonpath库的默认行为。默认配置指定JSON对象的顺序感知表示。使用json-smart,可以将其实现为LinkedHashMap
。
因此,对JSON对象的测试(如果以此方式进行,请使用这些库读取JSON)应该是:
if (object instanceof Map) {
System.out.println("object is a JSON object");
}