programing

JSON을 해석하고 값을 어레이로 변환하는 방법

yellowcard 2023. 4. 5. 21:30
반응형

JSON을 해석하고 값을 어레이로 변환하는 방법

public static void parseProfilesJson(String the_json){
       try {
            JSONObject myjson = new JSONObject(the_json);

            JSONArray nameArray = myjson.names();
            JSONArray valArray = myjson.toJSONArray(nameArray);
            for(int i=0;i<valArray.length();i++)
            {
                String p = nameArray.getString(i) + "," + ValArray.getString(i);
                Log.i("p",p);
            }       

        } catch (JSONException e) {
                e.printStackTrace();
        }
    }

보시다시피 이 샘플코드는 JSON의 KEY를 출력하고 이어서 JSON의 VALUES를 출력합니다.

프로필이 인쇄됩니다. jon이 이렇다면:

{'profiles':'john'}

멋지네요.괜찮습니다, 저는 그 변수들을 다룰 수 있습니다.단, JSON이 다음과 같은 경우:

{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}

이 경우 전체 값이 배열이 됩니다.기본적으로 이 어레이(이 경우 "값")만 가져오면 됩니다.JAVA에서 사용할 수 있는 실제 어레이로 변환합니다.내가 어떻게 그럴 수 있을까?감사해요.

예를 들어 다음과 같습니다.

{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}

다음과 같은 효과를 얻을 수 있습니다.

JSONObject myjson = new JSONObject(the_json);
JSONArray the_json_array = myjson.getJSONArray("profiles");

배열 개체를 반환합니다.

그 후 다음과 같이 반복됩니다.

    int size = the_json_array.length();
    ArrayList<JSONObject> arrays = new ArrayList<JSONObject>();
    for (int i = 0; i < size; i++) {
        JSONObject another_json_object = the_json_array.getJSONObject(i);
            //Blah blah blah...
            arrays.add(another_json_object);
    }

//Finally
JSONObject[] jsons = new JSONObject[arrays.size()];
arrays.toArray(jsons);

//The end...

데이터가 어레이인지 아닌지를 판단해야 합니다(단순히 확인만 하면 됩니다).charAt(0)로부터 시작하다[문자)

이게 도움이 됐으면 좋겠다.

요구 사항을 충족하기 위해 빠른 Json 파서를 선호할 수 있습니다.

Quick-json 파서는 매우 직설적이고 유연하며 매우 빠르고 사용자 정의가 가능합니다.이것을 시험해 보세요.

[Quick-json 파서] (https://code.google.com/p/quick-json/) - Quick-json 기능 -

  • JSON 사양에 준거(RFC4627)

  • 고성능 JSON 파서

  • 유연한 구성 가능한 해석 접근법 지원

  • 임의의 JSON 가계의 키/값 쌍의 설정 가능한 검증

  • 사용하기 쉬운 # 풋프린트 감소

  • 개발자 친화적이고 추적하기 쉬운 예외 발생

  • 플러그형 커스텀 검증 지원 - 키/값 검증은 커스텀 검증자를 설정함으로써 실행할 수 있습니다.

  • 파서 지원 검증 및 비검증

  • Quick-json 검증 파서를 사용하기 위한 두 가지 유형의 구성(JSON/XML) 지원

  • JDK 1.5 필요 # 외부 라이브러리 의존 없음

  • 오브젝트 시리얼화를 통한 Json Generation 지원

  • 구문 분석 프로세스 중 수집 유형 선택 지원

예를 들어,

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);

이 질문의 다른 답변은 작업할 Java 개체가 있다고 가정합니다.대응하는 Java 오브젝트가 없는 임의의 json 구조에서 값을 얻을 수 있기를 원했습니다.

제 생각은 "key": value" 형식의 필드 키입니다.이제 결과의 각 행에는 목록/어레이에 넣을 수 있는 값이 최대 1개 포함됩니다.json 스코프 딜리미터([]{})"도 삭제합니다.

이 솔루션에서는 다음과 같은 전제가 있습니다.

  1. json에는 큰따옴표를 사용합니다.

  2. json은 포맷이 꽤 잘 되어 있습니다.

    public static String getOnlyJsonValues(String json) {
        json = json.replaceAll("\\{", "");
        json = json.replaceAll("}", "");
        json = json.replaceAll("\\[", "");
        json = json.replaceAll("]", "");
        json = json.replaceAll("\".*?\":", "");
        return json;
    }
    

이제 출력을 문자열 목록으로 해석하면 됩니다.

    public static List<String> parseUniqueValues(String json) {
        List<String> values = new ArrayList<>();
        String onlyValues = getOnlyJsonValues(json);

        try {
            StringReader stringReader = new StringReader(onlyValues);
            BufferedReader bufReader = new BufferedReader(stringReader);
            String line;
            while ((line = bufReader.readLine()) != null) {
                if (line.endsWith(",")) {
                    line = line.substring(0, line.length() - 1);
                }
                if (line.startsWith("\"") && line.endsWith("\"")) {
                    line = line.substring(1, line.length() - 1);
                }


                line = line.trim();
                if (line.length() > 0) {
                    values.add(line);
                }
                
            }
        } catch (IOException e) {
            LOG.warn("Unable to read lines in String:" + onlyValues);
        }

        return values;
    }

언급URL : https://stackoverflow.com/questions/2255220/how-to-parse-a-json-and-turn-its-values-into-an-array

반응형