无法从 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);
});
}
所以我使用简单的 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);
});
}