Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 - Fatal编程技术网

Java 从内部json对象获取键值

Java 从内部json对象获取键值,java,json,Java,Json,我有一个json对象,如下所示 String jsonStr ="{\"m\":{\"p\":{\"0\":{\"ms\":{\"s\":1}}}}}"; 从这里我想得到键s的值 import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; JSONObject object

我有一个json对象,如下所示

String jsonStr ="{\"m\":{\"p\":{\"0\":{\"ms\":{\"s\":1}}}}}";
从这里我想得到键s的值

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

JSONObject object = new JSONObject(jsonStr);

System.out.println(object.get("m"));

JSONObject mObj  = (JSONObject) object.get("m");
JSONObject pObj  = (JSONObject) mObj.get("p");
JSONObject oObj  = (JSONObject) pObj.get("0");
JSONObject sObj  = (JSONObject) oObj.get("ms");
System.out.println(sObj.get("s"));

没有使用上述逻辑,而是有任何方法可以轻松获取键s的值,创建表示JSON的对象将是一种更干净的方法。但是,对于动态键,可以使用递归

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

String jsonStr = "{\"m\":{\"p\":{\"0\":{\"ms\":{\"s\":1}}}}}";
Gson gson = new GsonBuilder().create();
Map data = gson.fromJson(jsonStr, Map.class);
Object value = obj.get(data, "s");
System.out.println(value); //1.0

//Input JSON as Map & key to search on
public Object get(Map data, String key) {
    System.out.println(data);
    if (!data.containsKey(key)) {
        for (Object v : data.values()) {
            return get((Map) v, key);
        }
    }
    return data.get(key);
}

如果创建一个表示json的对象,您将有一行代码来访问它,那么这个对象是什么呢?对象值=对象获取(数据,“s”);obj是实现上述方法的类的对象。