Java - 从 JSONObject 中检索变量类型的值

Java - Retrieve values of variable type from JSONObject

我有一些 JSON 像这样:

{"result":[{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}]}

我得到的职业值是这样的:

import org.json.JSONArray;
import org.json.JSONObject;

String occupation = null;

JSONArray resultArray = obj.getJSONArray("result");
JSONObject firstResult = resultArray.getJSONObject(0);
occupation = firstResult.getJSONObject("job").getString("occupation");

但是,由于某些原因,占用值并不总是 String。我的猜测是它可能是 int 或者它可能是 null。我最终遇到这样的异常:

org.json.JSONException: JSONObject["occupation"] not a string. at org.json.JSONObject.getString(JSONObject.java:658)

在处理采用可变数据类型的 JSONObject 时,您应该怎么做?

这是你的初始 Json:

{"result":[{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}]}

当你这样做时:

JSONArray resultArray = obj.getJSONArray("result");

你得到:

[{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}]

然后:

JSONObject firstResult = resultArray.getJSONObject(0);

你得到:

{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}

下一个:

firstResult.getJSONObject("job")

生产:

{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}

最后,你想获得职业值使用:get("occupation").

你可以

String occupation = String.valueOf(firstResult.getJSONObject("job").get("occupation"));

如果字段 occupation 总是有一个值(不是数组或另一个 JSON 对象)。

应用此以字符串格式接收所有数据类型

occupation = firstResult.getJSONObject("job").get("occupation").toString();

我也遇到了你的问题,当你提到:

However, for some reason, the occupation value is not always a String. My guess is that is could be an int or it could be null. I end up with an exception like this:

答案: 当您的 JSON 列数据类型不是整数、字符串...时,需要将其定义为对象或 Class

Object o = new Object();

然后您可以使用 if-else 条件来检查包装器 class(您的类型)可以是什么,然后相应地执行以下操作。 请检查下图。

图片来源: https://www.webucator.com/how-to/how-check-object-type-java.cfm