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

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

DDD
DDD원래의
2024-10-28 10:18:02902검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.