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

时间:2015-07-08 20:22:19

标签: java json 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 [“占用”]不是字符串。       在org.json.JSONObject.getString(JSONObject.java:658)

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

4 个答案:

答案 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 条件来检查包装类(您的类型)可以是什么,然后相应地执行以下操作。 请检查下面的图片。

enter image description here

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