所以我使用简单的json库来执行一些json操作。现在,我可以从json字符串构造JSONObject,但无法从我创建的对象中获取值。例如,如果我这样做:
String value = (String) jsonRecord.get("Key");
我将收到一个错误消息:
java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to java.lang.String
我删除了类型转换为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
有没有人能建议一下如何解决这个问题?谢谢!
发布于 2018-06-30 03:34:00
您的值是一个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");
发布于 2020-02-24 16:29:57
只需添加当前的"org.json“依赖就可以解决您的问题,因为最新版本包含返回Object的get()方法(JSONObject类)。
下面是我的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);
});
}
发布于 2018-06-30 03:40:29
您可以使用泛型来防止ClassCastException,因为泛型提供编译时检查,并可用于开发类型安全的应用程序。
https://stackoverflow.com/questions/51108102
复制相似问题