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 이름의 경우 메서드는 해당 이름을 건너뜁니다.
추가 고려 사항:
위 내용은 Android에서 GSON을 사용하여 중첩 JSON을 구문 분석할 때 \'BEGIN_OBJECT가 예상되었지만 NAME이었습니다\' 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!