问题描述
下面是一些示例代码:
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