JSONObject-如何得到一个值?

我在 http://json.org/javadoc/org/json/JSONObject.html上使用 java 类。

下面是我的代码片段:

String jsonResult = UtilMethods.getJSON(this.jsonURL, null);
json = new JSONObject(jsonResult);

getJSON返回以下字符串

{"LabelData":{"slogan":"AWAKEN YOUR SENSES","jobsearch":"JOB SEARCH","contact":"CONTACT","video":"ENCHANTING BEACHSCAPES","createprofile":"CREATE PROFILE"}}

我如何得到「标语」的价值?

我试了页面上列出的所有方法,但都不管用。

380933 次浏览
String loudScreaming = json.getJSONObject("LabelData").getString("slogan");

如果你想要的是一个更深层次的键/值,并且每个层次的键/值都是 没有处理数组,那么你可以递归地搜索树:

public static String recurseKeys(JSONObject jObj, String findKey) throws JSONException {
String finalValue = "";
if (jObj == null) {
return "";
}


Iterator<String> keyItr = jObj.keys();
Map<String, String> map = new HashMap<>();


while(keyItr.hasNext()) {
String key = keyItr.next();
map.put(key, jObj.getString(key));
}


for (Map.Entry<String, String> e : (map).entrySet()) {
String key = e.getKey();
if (key.equalsIgnoreCase(findKey)) {
return jObj.getString(key);
}


// read value
Object value = jObj.get(key);


if (value instanceof JSONObject) {
finalValue = recurseKeys((JSONObject)value, findKey);
}
}


// key is not found
return finalValue;
}

用法:

JSONObject jObj = new JSONObject(jsonString);
String extract = recurseKeys(jObj, "extract");

使用 https://stackoverflow.com/a/4149555/2301224中的 Map 代码

您可以尝试使用下面的函数从 JSON 字符串中获取值,

public static String GetJSONValue(String JSONString, String Field)
{
return JSONString.substring(JSONString.indexOf(Field), JSONString.indexOf("\n", JSONString.indexOf(Field))).replace(Field+"\": \"", "").replace("\"", "").replace(",","");
}

这可能有助于搜索 嵌套对象嵌套数组中的键。这是所有情况下的通用解决方案。

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


public class MyClass
{
public static Object finalresult = null;
public static void main(String args[]) throws JSONException
{
System.out.println(myfunction(myjsonstring,key));
}


public static Object myfunction(JSONObject x,String y) throws JSONException
{
JSONArray keys =  x.names();
for(int i=0;i<keys.length();i++)
{
if(finalresult!=null)
{
return finalresult;                     //To kill the recursion
}


String current_key = keys.get(i).toString();


if(current_key.equals(y))
{
finalresult=x.get(current_key);
return finalresult;
}


if(x.get(current_key).getClass().getName().equals("org.json.JSONObject"))
{
myfunction((JSONObject) x.get(current_key),y);
}
else if(x.get(current_key).getClass().getName().equals("org.json.JSONArray"))
{
for(int j=0;j<((JSONArray) x.get(current_key)).length();j++)
{
if(((JSONArray) x.get(current_key)).get(j).getClass().getName().equals("org.json.JSONObject"))
{
myfunction((JSONObject)((JSONArray) x.get(current_key)).get(j),y);
}
}
}
}
return null;
}
}

可能性:

  1. “键”: “值”
  2. “ key”: { Object }
  3. “ key”: [ Array ]

逻辑:

  • 检查当前键和搜索键是否相同,如果相同,则返回该键的值。
  • 如果它是一个对象,我就递归地将值发送给同一个函数。
  • 如果它是一个数组,我检查它是否包含一个对象,如果是这样,我递归地将值传递给同一个函数。