根据对象将对象转换为 JSONObject 或 JSONArray 的方法
Method to cast Object to JSONObject or JSONArray depending on the Object
我一直在尝试这样的方法,但找不到任何解决方案:
public static JSONObject or JSONArray objectToJSON(Object object){
if(object is a JSONObject)
return new JSONObject(object)
if(object is a JSONArray)
return new JSONArray(object)
}
我试过这个:
public static JSONObject objectToJSONObject(Object object){
Object json = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
JSONObject jsonObject = (JSONObject)json;
return jsonObject;
}
public static JSONArray objectToJSONArray(Object object){
Object json = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
JSONArray jsonObject = (JSONArray)json;
return jsonObject;
}
但是当我调用 objectToJSONArray(object) 时,我放置了一个 JSONObject,它导致转换崩溃。所以我想要一个通用的方法。有人找到任何解决方案吗?
我想您已经看过 this question。
您可以在每个方法的 return 之前使用 instanceof
添加类型检查,如果对象不是预期的类型,则 return null。那应该摆脱 ClassCastException。
示例:
public static JSONObject objectToJSONObject(Object object){
Object json = null;
JSONObject jsonObject = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
if (json instanceof JSONObject) {
jsonObject = (JSONObject) json;
}
return jsonObject;
}
public static JSONArray objectToJSONArray(Object object){
Object json = null;
JSONArray jsonArray = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
if (json instanceof JSONArray) {
jsonArray = (JSONArray) json;
}
return jsonArray;
}
然后,你可以尝试这两种方法,并使用不 return 为 null 的那个的 return 值,像这样:
public void processJSON(Object obj){
JSONObject jsonObj = null;
JSONArray jsonArr = null;
jsonObj = objectToJSONObject(obj);
jsonArr = objectToJSONArray(obj);
if (jsonObj != null) {
//process JSONObject
} else if (jsonArr != null) {
//process JSONArray
}
}
JsonArray
本质上是 List
JsonObject
本质上是 Map
由于 Java 不支持具有多个 return 类型的函数(除非它是一个接受 return 类型作为参数的通用函数 - example),执行所需操作的最简单方法如下:
if (object instanceof Map){
JSONObject jsonObject = new JSONObject();
jsonObject.putAll((Map)object);
...
...
}
else if (object instanceof List){
JSONArray jsonArray = new JSONArray();
jsonArray.addAll((List)object);
...
...
}
另一种方法,如果你想把它作为一个函数,将给定的 JsonObject
转换成一个 JsonArray
并编写你的代码来操作那个 JsonArray
,而不不必担心类型。以下功能用于上述目的。
public JSONArray getJsonObjectOrJsonArray(Object object){
JSONArray jsonArray = new JSONArray();
if (object instanceof Map){
JSONObject jsonObject = new JSONObject();
jsonObject.putAll((Map)object);
jsonArray.add(jsonObject);
}
else if (object instanceof List){
jsonArray.addAll((List)object);
}
return jsonArray;
}
我一直在尝试这样的方法,但找不到任何解决方案:
public static JSONObject or JSONArray objectToJSON(Object object){
if(object is a JSONObject)
return new JSONObject(object)
if(object is a JSONArray)
return new JSONArray(object)
}
我试过这个:
public static JSONObject objectToJSONObject(Object object){
Object json = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
JSONObject jsonObject = (JSONObject)json;
return jsonObject;
}
public static JSONArray objectToJSONArray(Object object){
Object json = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
JSONArray jsonObject = (JSONArray)json;
return jsonObject;
}
但是当我调用 objectToJSONArray(object) 时,我放置了一个 JSONObject,它导致转换崩溃。所以我想要一个通用的方法。有人找到任何解决方案吗?
我想您已经看过 this question。
您可以在每个方法的 return 之前使用 instanceof
添加类型检查,如果对象不是预期的类型,则 return null。那应该摆脱 ClassCastException。
示例:
public static JSONObject objectToJSONObject(Object object){
Object json = null;
JSONObject jsonObject = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
if (json instanceof JSONObject) {
jsonObject = (JSONObject) json;
}
return jsonObject;
}
public static JSONArray objectToJSONArray(Object object){
Object json = null;
JSONArray jsonArray = null;
try {
json = new JSONTokener(object.toString()).nextValue();
} catch (JSONException e) {
e.printStackTrace();
}
if (json instanceof JSONArray) {
jsonArray = (JSONArray) json;
}
return jsonArray;
}
然后,你可以尝试这两种方法,并使用不 return 为 null 的那个的 return 值,像这样:
public void processJSON(Object obj){
JSONObject jsonObj = null;
JSONArray jsonArr = null;
jsonObj = objectToJSONObject(obj);
jsonArr = objectToJSONArray(obj);
if (jsonObj != null) {
//process JSONObject
} else if (jsonArr != null) {
//process JSONArray
}
}
JsonArray
本质上是 List
JsonObject
本质上是 Map
由于 Java 不支持具有多个 return 类型的函数(除非它是一个接受 return 类型作为参数的通用函数 - example),执行所需操作的最简单方法如下:
if (object instanceof Map){
JSONObject jsonObject = new JSONObject();
jsonObject.putAll((Map)object);
...
...
}
else if (object instanceof List){
JSONArray jsonArray = new JSONArray();
jsonArray.addAll((List)object);
...
...
}
另一种方法,如果你想把它作为一个函数,将给定的 JsonObject
转换成一个 JsonArray
并编写你的代码来操作那个 JsonArray
,而不不必担心类型。以下功能用于上述目的。
public JSONArray getJsonObjectOrJsonArray(Object object){
JSONArray jsonArray = new JSONArray();
if (object instanceof Map){
JSONObject jsonObject = new JSONObject();
jsonObject.putAll((Map)object);
jsonArray.add(jsonObject);
}
else if (object instanceof List){
jsonArray.addAll((List)object);
}
return jsonArray;
}