Java无法解析嵌套的json对象

问题描述

下面是一些示例代码:

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

我尝试了JSONParser Gson-但仍然无法做到...

注意:字符串'k'的解析工作正常,因为obj已正确填充并被打印出来。当我尝试访问此obj中的对象时,它失败: JSONObject innerObj =(JSONObject)obj.get(“ root1”);

解决方法

apache commons文本库中有实用程序StringEscapeUtils class用于此类翻译。应用它会删除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},\"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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...