我有一些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 [“占用”]不是字符串。 在org.json.JSONObject.getString(JSONObject.java:658)
当您处理采用可变数据类型的JSONObject时,您应该怎么做?
答案 0 :(得分:1)
这是你最初的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"}
要完成,您是否希望使用职业值:获取(“职业”)。
答案 1 :(得分:1)
你可以做到
String occupation = String.valueOf(firstResult.getJSONObject("job").get("occupation"));
如果字段occupation
始终具有值(不是数组或其他JSON对象)。
答案 2 :(得分:1)
应用此选项以接收字符串格式的所有数据类型
{{1}}
答案 3 :(得分:0)
当你提到时,我也遇到了你的问题:
<块引用>但是,由于某种原因,职业值并不总是一个字符串。 我的猜测是它可能是一个 int 或者它可能是 null。我结束了 像这样的例外:
答案: 当您的 JSON 列数据类型不是 Integer,String... 时,需要将其定义为 Object 或 Class
Object o = new Object();
然后您可以使用 if-else 条件来检查包装类(您的类型)可以是什么,然后相应地执行以下操作。 请检查下面的图片。
图片来源: https://www.webucator.com/how-to/how-check-object-type-java.cfm