无法从JSONObject获取价值

时间:2018-06-29 19:14:51

标签: java json simplejson

所以我正在使用简单的json库执行一些json操作。现在,我可以从json字符串构造JSONObject,但是我无法从创建的对象中获取值。 例如,如果我做类似的事情:

String value = (String) jsonRecord.get("Key");

我会收到一条错误消息:

java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to java.lang.String

我删除了强制转换为字符串的类型,它可以在IntelliJ中使用。但是,当我在命令行执行此操作时,它会给我一个错误,提示:

error: incompatible types: Object cannot be converted to String

架构如下:

    {   
       "myArray": {
          "array": ["Decaf mocha", "Vanilla mocha", "Chai Latte"]
       },
        "Item": {
          "string": "Decaf macha"
        }
    }

更新:toString()解决了该问题。但是当我尝试获取数组时,我得到了:

java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray

有人可以建议如何解决该问题吗?谢谢!

4 个答案:

答案 0 :(得分:1)

您的值是JSONObject,而不是字符串。您的错误消息很清楚。如果您确实希望将其用作字符串,请使用

String value = jsonRecord.get("Key").toString();

您可以将任何对象(不仅是字符串)传递给System.out.println,而且要将其实际转换为字符串,您需要自己调用toString()

但是,如果您期望将实际的字符串作为Key,而不是JSONObject,则应该再看一下JSON,因为您做错了事。

更新:

好的,看看您的架构,我看到了问题。 JSON不会将键直接映射到值,而是将键映射到包含值的对象。因此,要在您发布的JSON中获取数组,而不是

value = jsonRecord.get("myArray")

您将使用

JSONArray value = jsonRecord.getJSONObject("myArray").getJSONArray("array");

对于字符串,您将使用

String value = jsonRecord.getJSONObject("Item").getString("string");

答案 1 :(得分:1)

只需添加当前的“ org.json”依赖项即可解决您的问题,因为最新版本拥有get()方法(JSONObject类),该方法返回Object。

以下是我的Maven依赖项:-

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20190722</version>
</dependency>

下面是我执行get key操作的代码。

public void iterateJsonObject(JSONObject jsonObj) {
        jsonObj.keySet().forEach(keyStr ->
        {
            Object keyvalue = jsonObj.get(keyStr);
            System.out.println("key: "+ keyStr + " value: " + keyvalue);
        });
    }

答案 2 :(得分:0)

您可以通过使用泛型来防止ClassCastException,因为泛型提供了编译时检查,并可用于开发类型安全的应用程序。

答案 3 :(得分:0)

您没有将要获取的json记录值转换为字符串。

String value = String.valueOf(jsonRecord.get("Key"));

他应该解决您的问题。您也可以使用toString()方法,但我个人更喜欢String.valueOf(),因为有时toString()倾向于提供垃圾值。