[英]Java unable to parse nested json object
下面是一些示例代码:
import org.json.JSONObject;
String k = "{\"root1\":\"{\\\"key1\\\":\\\"val1\\\",\\\"key2\\\":1,\\\"key3\\\":null}\",\"root2\":\"OTHERS\",\"root3\":1}";
JSONObject obj = new JSONObject(str);
System.out.println(obj);
/*
here I want to do something like:
JSONObject innerObj = (JSONObject) obj.get("root1");
String k1 = innerObj.get("key1");
Also, should work with nested inner objects, so for example, should be able to do:
String k4 = innerObj.get("key1.innerKey1");
*/
{"root1":"{\"key1\":\"val1\",\"key2\":1,\"key3\":null}","root2":"OTHERS","root3":1}
在做 JSONObject innerObj = (JSONObject) obj.get("root1"); - 它给:
线程“main”中的异常 java.lang.ClassCastException:java.lang.String 无法转换为 org.json.JSONObject
我尝试了 Gson、JSONParser - 但仍然无法做到......
注意:字符串 'k' 的解析工作正常,因为 obj 被正确填充并被打印出来。 当我尝试访问此 obj 中的对象时失败: JSONObject innerObj = (JSONObject) obj.get("root1");
在 apache 公共文本库中有用于此类翻译的实用程序StringEscapeUtils 类。 应用它会删除那些围绕root1
值的额外双引号。
将此commons-text jar 依赖项添加到您的项目中。
用法 -
String k = "{\"root1\":\"{\\\"key1\\\":\\\"val1\\\",\\\"key2\\\":1,\\\"key3\\\":null}\",\"root2\":\"OTHERS\",\"root3\":1}";
// add this line
String unescapedJsonString = StringEscapeUtils.unescapeJson(k);
// pass new json string to Json library
JSONObject obj = new JSONObject(unescapedJsonString);
请检查这个-
public static void main(String[] args) {
String k ="{\"root1\":{\"key1\":\"val1\",\"key2\":1,\"key3\":null},\"root2\":\"OTHERS\",\"root3\":1}";
JSONObject obj = new JSONObject(k);
System.out.println(obj);
//here I want to do something like:
JSONObject innerObj = (JSONObject) obj.get("root1");
Object k1 = innerObj.get("key1");
System.out.println(k1);
Object k2 = innerObj.get("key2");
System.out.println(k2);
Object k3 = innerObj.get("key3");
System.out.println(k3);
System.out.println(obj.get("root2"));
System.out.println(obj.get("root3"));
}
输出 -
{"root1":{"key1":"val1","key2":1,"key3":null},"root2":"OTHERS","root3":1}
val1
1
null
OTHERS
1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.