> Java > java지도 시간 > 본문

Android에서 GSON을 사용하여 중첩 JSON을 구문 분석할 때 \'BEGIN_OBJECT가 예상되었지만 NAME이었습니다\' 오류를 수정하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-10-28 10:18:02
원래의
902명이 탐색했습니다.

How to Fix the

Android에서 GSON을 사용하여 JSON 구문 분석

Android에서 GSON을 사용하여 JSON 구문 분석을 어떻게 단순화할 수 있습니까? GSON을 사용할 때 일반적인 문제를 살펴보고 단계별 해결 방법을 살펴보겠습니다.

문제 설명:

GSON을 사용하여 JSON 문자열을 구문 분석할 때 'BEGIN_OBJECT가 예상되었지만 NAME이었습니다' 오류가 발생할 수 있습니다. 이는 일반적으로 배열 내에 중첩된 JSON 개체를 구문 분석하려고 할 때 발생합니다.

JSON 예:

다음 JSON 데이터를 고려하세요.

<code class="json">{
    "count": "12",
    "colbreak": 1,
    "name": "unary rels",
    "score": "9090",
    "Words": [
        {
            "count": 6,
            "word": "prp_għaċ-",
            "name": "prp_għaċ-",
            "score": 9.1,
            "Words": "kol",
            "seek": 2231297
        }
    ],
    "seek": 0
}</code>
로그인 후 복사

코드:

파싱을 위해 GSON을 사용하는 코드:

<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) {
    // ...
    while (reader.hasNext()) {
        T cse = (T) gson.fromJson(reader, t.getClass());
        lcs.add(cse);
    }
    // ...
}</code>
로그인 후 복사

오류:

실행 중 코드로 인해 다음과 같은 오류가 발생할 수 있습니다.

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73
로그인 후 복사

해결책:

이 오류를 해결하려면 JSON 값을 읽는 방식을 수정해야 합니다. 전체 JSON 문자열을 반복하는 대신 구문 분석하려는 특정 개체로 건너뛴 다음 이를 디코딩해야 합니다.

수정된 방법:

수정된 버전은 다음과 같습니다. JsonParse 메서드:

<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) {
    // ...
    while (reader.hasNext()) {
        String name = reader.nextName();
        if (name.equals("Words")) {
            reader.beginArray();
            while (reader.hasNext()) {
                T cse = (T) gson.fromJson(reader, t.getClass());
                lcs.add(cse);
            }
            reader.endArray();
        } else {
            reader.skipValue();
        }
    }
    // ...
}</code>
로그인 후 복사

설명:

이 수정된 메서드에서 코드는 현재 JSON 이름이 "Words"인지 확인하고 그렇다면 시작합니다. 배열을 읽는 중입니다. 그런 다음 배열의 각 객체를 반복하면서 GSON을 사용하여 구문 분석하고 목록에 추가합니다. "count" 또는 "score"와 같은 다른 JSON 이름의 경우 메서드는 해당 이름을 건너뜁니다.

추가 고려 사항:

  • 모델 클래스(GsonParse 및 Words)에는 모든 JSON 필드에 대한 getter 및 setter가 있습니다.
  • 자산 폴더의 파일에서 JSON을 읽는 경우 JsonReader 대신 InputStreamReader를 사용해야 합니다.
  • UTF-8 문자를 지원하려면 JSON 문자열을 구문 분석하기 전에 UTF-8로 변환하세요.

위 내용은 Android에서 GSON을 사용하여 중첩 JSON을 구문 분석할 때 \'BEGIN_OBJECT가 예상되었지만 NAME이었습니다\' 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!