首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法从JSONObject获取值

无法从JSONObject获取值
EN

Stack Overflow用户
提问于 2018-06-30 03:14:51
回答 4查看 4.1K关注 0票数 0

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

代码语言:javascript
复制
String value = (String) jsonRecord.get("Key");

我将收到一个错误消息:

代码语言:javascript
复制
java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to java.lang.String

我删除了类型转换为string,它在IntelliJ中工作。但是,当我在命令行中执行此操作时,它会给出一个错误消息:

代码语言:javascript
复制
error: incompatible types: Object cannot be converted to String

模式如下:

代码语言:javascript
复制
    {   
       "myArray": {
          "array": ["Decaf mocha", "Vanilla mocha", "Chai Latte"]
       },
        "Item": {
          "string": "Decaf macha"
        }
    }

更新:toString()修复了这个问题。但是当我尝试获取数组时,我得到了:

代码语言:javascript
复制
java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray

有没有人能建议一下如何解决这个问题?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-30 03:34:00

您的值是一个JSONObject,而不是一个字符串。您的错误消息清楚地说明了这一点。如果您确实想将其作为字符串,请使用

代码语言:javascript
复制
String value = jsonRecord.get("Key").toString();

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

然而,如果您期望一个实际的字符串作为Key,而不是JSONObject,那么您应该重新检查一下您的JSON,因为您做错了一些事情。

更新:

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

代码语言:javascript
复制
value = jsonRecord.get("myArray")

您将使用

代码语言:javascript
复制
JSONArray value = jsonRecord.getJSONObject("myArray").getJSONArray("array");

对于字符串,您可以使用

代码语言:javascript
复制
String value = jsonRecord.getJSONObject("Item").getString("string");
票数 2
EN

Stack Overflow用户

发布于 2020-02-24 16:29:57

只需添加当前的"org.json“依赖就可以解决您的问题,因为最新版本包含返回Object的get()方法(JSONObject类)。

下面是我的maven依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20190722</version>
</dependency>

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

代码语言:javascript
复制
public void iterateJsonObject(JSONObject jsonObj) {
        jsonObj.keySet().forEach(keyStr ->
        {
            Object keyvalue = jsonObj.get(keyStr);
            System.out.println("key: "+ keyStr + " value: " + keyvalue);
        });
    }
票数 1
EN

Stack Overflow用户

发布于 2018-06-30 03:40:29

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51108102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档