programing

JSONObject - 값을 얻는 방법

goodsources 2023. 2. 22. 21:51
반응형

JSONObject - 값을 얻는 방법

http://json.org/javadoc/org/json/JSONObject.html에서 자바 클래스를 사용하고 있습니다.

코드 스니펫은 다음과 같습니다.

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"}}

슬로건의 가치를 얻으려면 어떻게 해야 하나요?

페이지에 나와 있는 모든 방법을 시도해 봤지만 효과가 없었어요.

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의 지도 코드 사용

는 중첩된 개체 및 중첩된 배열에 있는 키를 검색할 때 유용합니다.그리고 이것은 모든 경우에 대한 일반적인 해결책입니다.

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. "키": {개체}
  3. "키" : [어레이]

논리:

  • 현재 키와 검색 키가 동일한지 확인하고 같은 경우 해당 키의 값을 반환합니다.
  • 오브젝트일 경우 같은 함수에 재귀적으로 값을 보냅니다.
  • 배열일 경우 객체가 포함되어 있는지 확인하고, 포함되어 있을 경우 동일한 함수에 반복적으로 값을 전달합니다.

다음 함수를 사용하여 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(",","");   
}

언급URL : https://stackoverflow.com/questions/7451600/jsonobject-how-to-get-a-value

반응형