Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java无法分析嵌套的json对象_Java_Json_Jsonparser - Fatal编程技术网

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);