Java无法分析嵌套的json对象
下面是一些示例代码:Java无法分析嵌套的json对象,java,json,jsonparser,Java,Json,Jsonparser,下面是一些示例代码: import org.json.JSONObject; String k = "{\"root1\":\"{\\\"key1\\\":\\\"val1\\\",\\\"key2\\\":1,\\\"key3\\\":null}\",\"root2\":\"OTHERS\",\"root3\&qu
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");
*/
在执行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”) 请检查这个-
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
ApacheCommons文本库中有用于此类翻译的实用程序。应用它将删除root1
value周围的额外双引号
将此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);
root1
键映射到一个字符串。这就是\“
引号在JSON中起作用。看起来您的JSON拼错了。您的root1
属性不是JSON对象;它是一个字符串,其值为JSON,其根值为JSON对象。如果可能的话,纠正总成;如果没有,您将需要提取字符串并再次对其进行解析。@chrylis-cautiouslyoptimistic--hw要这样做吗?我正在使用import org.json.JSONObject;不知道是谁投了反对票。。。我在实际代码中也做了类似的事情,但当我访问内部元素并打印它时,它会给出类似于:``JSONObject innerObj=(JSONObject)obj.get(“root1”);debug(“内部对象:+innerObj.toString());`内部obj:{“bytes”:[123,34101],“empty”:false}我的问题如上面@chrylis-cautionouslyoptimistic-所述:“您的root1属性不是JSON对象;它是一个字符串,其值为JSON,其根值为JSON对象。如果可能的话,纠正总成;如果不是,则需要提取字符串并再次通过解析运行它。“是的,因此my root1的值是一个带有JSONObj的字符串,而不是JSONObj
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);