无法从 JSONObject 获取值

Can't get value from JSONObject

所以我使用简单的 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

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

您的值是 JSON对象,而不是字符串。您的错误消息非常清楚。如果你真的想要它作为一个字符串,使用

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

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

但是,如果您希望 Key 是一个实际的字符串,而不是 JSON 对象,那么您应该再看看 JSON,因为您做错事了。

更新:

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

value = jsonRecord.get("myArray")

你会用

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

对于字符串,您将使用

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

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

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

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

他应该可以解决您的问题。您也可以使用 toString() 方法,但我个人更喜欢 String.valueOf() 而不是它,因为有时 toString() 往往会产生垃圾值。

只需添加当前的 "org.json" 依赖项即可解决您的问题,因为最新版本包含 get() 方法 (JSONObject class),其中 returns Object.

下面是我的maven依赖:-

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

下面是我执行获取密钥操作的代码。

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