>  기사  >  Java  >  Android에서 GSON을 사용하여 JSON 데이터를 구문 분석할 때 \'java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 columns 73\' 오류가 발생하는 이유는 무엇입니까?

Android에서 GSON을 사용하여 JSON 데이터를 구문 분석할 때 \'java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 columns 73\' 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 14:07:291071검색

Why am I getting the

Android에서 GSON을 사용하여 JSON 데이터를 구문 분석하는 방법: 오류 해결

Android에서 GSON을 사용하여 JSON 데이터를 구문 분석할 때 오류가 발생할 수 있습니다. : "java.lang.IllegalStateException: BEGIN_OBJECT가 필요했지만 라인 1 열 73에 NAME이 있었습니다." 이 오류는 JSON 데이터의 구문 문제, 특히 여는 중괄호가 누락되었음을 나타냅니다.

가능한 해결 방법

이 문제를 해결하려면 JSON 데이터가 올바른지 확인하세요. 형식이 지정되어 있으며 여는 중괄호와 닫는 중괄호를 모두 포함합니다. 예:

<code class="json">{
    "count": "12",
    "colbreak": 1,
    ...
    "seek": 0
}</code>

일반적인 원인

이 오류의 일반적인 원인 중 하나는 파일에 저장되거나 서버에서 문자열로 다운로드되는 JSON 데이터를 수신하는 것입니다. . 이러한 경우 문자열이 제대로 인코딩되지 않거나 접두사가 붙지 않아 구문 분석 오류가 발생할 수 있습니다.

사용자 정의 클래스 수정

코드에서 Java를 사용하고 있습니다. JSON 데이터 구조를 나타내기 위해 사용자 정의 클래스인 GsonParse를 생성하는 리플렉션입니다. 이 접근 방식은 일반적으로 권장되지 않습니다. 대신 GsonParse의 각 필드에 대해 명시적인 getter 및 setter 메서드를 만듭니다. 또한 JSON 속성 이름과 일치하도록 클래스 및 필드 이름에 @SerializedName 주석을 추가합니다.

예:

<code class="java">public class GsonParse {

    @SerializedName("count")
    private String count;

    @SerializedName("colbreak")
    private String colbreak;

    @SerializedName("name")
    private String name;

    @SerializedName("score")
    private String score;

    @SerializedName("Words")
    private List<Words> mWords = new ArrayList<>();

    @SerializedName("seek")
    private String seek;

    // Add getters and setters here...
}</code>

UTF-8 인코딩

JSON 데이터가 UTF-8 형식으로 올바르게 인코딩되었는지 확인하세요. HTTP를 통해 JSON 데이터를 수신할 때 서버는 적절한 Content-Type 헤더(예: 'application/json; charset=utf-8')로 응답해야 합니다.

향상된 구문 분석 방법

다음은 리더를 사용하는 구문 분석 방법의 개선된 버전입니다.

<code class="java">public static <T> ArrayList<T> JsonParse(T t, Reader reader) {
    ArrayList<T> lcs = new ArrayList<>();
    try {
        Gson gson = new Gson();
        JsonReader jsonReader = new JsonReader(reader);

        jsonReader.beginObject();
        while (jsonReader.hasNext()) {
            T cse = (T) gson.fromJson(jsonReader, t.getClass());
            lcs.add(cse);
        }
        jsonReader.endObject();
        jsonReader.close();
    } catch (UnsupportedEncodingException | IOException e) {
        e.printStackTrace();
    }
    return (ArrayList<T>) lcs;
}</code>

사용

이 방법을 사용하려면 다음에서 리더를 생성하세요. 소스(예: 파일 또는 HTTP 응답)를 JsonParse 메서드에 전달합니다.

<code class="java">InputStream ims = assetManager.open("file.txt");
Reader reader = new InputStreamReader(ims, "UTF-8");

ArrayList<GsonParse> gsonObjects = JsonParse(new GsonParse(), reader);</code>

위 내용은 Android에서 GSON을 사용하여 JSON 데이터를 구문 분석할 때 \'java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 columns 73\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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