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
我有一些 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