Share via


JsonReader 클래스

정의

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

[Android.Runtime.Register("android/util/JsonReader", DoNotGenerateAcw=true)]
public sealed class JsonReader : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ICloseable
[<Android.Runtime.Register("android/util/JsonReader", DoNotGenerateAcw=true)>]
type JsonReader = class
    inherit Object
    interface ICloseable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
상속
JsonReader
특성
구현

설명

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. 이 스트림에는 리터럴 값(문자열, 숫자, 부울 및 null)과 개체 및 배열의 시작 및 끝 구분 기호가 모두 포함됩니다. 토큰은 JSON 문서에 표시되는 순서와 동일한 순서로 깊이 우선 순서로 트래버스됩니다. JSON 개체 내에서 이름/값 쌍은 단일 토큰으로 표시됩니다.

<h3>구문 분석 JSON</h3> 사용자 고유의 JSON 스트림에 대한 재귀 하강 파서 만들기를 먼저 를 만드는 진입점 메서드를 JsonReader만듭니다.

다음으로 JSON 텍스트의 각 구조에 대한 처리기 메서드를 만듭니다. 각 개체 형식 및 각 배열 형식에 대한 메서드가 필요합니다. <ul>li 강력한 배열 처리</강력한> 메서드 내에서 <먼저 를 호출 #beginArray 하여 배열의 여는 대괄호를 사용합니다.>>< 그런 다음 값을 누적하는 while 루프를 만들고 가 false일 때 #hasNext 종료합니다. 마지막으로 를 호출 #endArray하여 배열의 닫는 대괄호를 읽습니다. <li>강력한>개체 처리</강력한> 메서드 내에서 <먼저 를 호출 #beginObject 하여 개체의 여는 중괄호를 사용합니다. 그런 다음 이름에 따라 지역 변수에 값을 할당하는 while 루프를 만듭니다. 이 루프는 가 false이면 #hasNext 종료됩니다. 마지막으로 를 호출 #endObject하여 개체의 닫는 중괄호를 읽습니다. </ul>

중첩된 개체 또는 배열이 발견되면 해당 처리기 메서드에 위임합니다.

알 수 없는 이름이 발견되면 예외로 엄격한 파서가 실패해야 합니다. Lenient 파서는 를 호출 #skipValue() 하여 값의 중첩된 토큰을 재귀적으로 건너뛰어야 하며, 그렇지 않으면 충돌할 수 있습니다.

값이 null일 수 있는 경우 먼저 를 사용하여 #peek()검사 합니다. Null 리터럴은 또는 #skipValue()#nextNull() 사용하여 사용할 수 있습니다.

<h3>예제</h3> 다음과 같은 메시지 스트림을 구문 분석한다고 가정합니다.

{@code
            [
              {
                "id": 912345678901,
                "text": "How do I read JSON on Android?",
                "geo": null,
                "user": {
                  "name": "android_newb",
                  "followers_count": 41
                 }
              },
              {
                "id": 912345678902,
                "text": "@android_newb just use android.util.JsonReader!",
                "geo": [50.454722, -104.606667],
                "user": {
                  "name": "jesse",
                  "followers_count": 2
                }
              }
            ]}

이 코드는 위의 구조에 대한 파서 를 구현합니다.

{@code

              public List<Message> readJsonStream(InputStream in) throws IOException {
                JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
                try {
                  return readMessagesArray(reader);
                } finally {
                  reader.close();
                }
              }

              public List<Message> readMessagesArray(JsonReader reader) throws IOException {
                List<Message> messages = new ArrayList<Message>();

                reader.beginArray();
                while (reader.hasNext()) {
                  messages.add(readMessage(reader));
                }
                reader.endArray();
                return messages;
              }

              public Message readMessage(JsonReader reader) throws IOException {
                long id = -1;
                String text = null;
                User user = null;
                List<Double> geo = null;

                reader.beginObject();
                while (reader.hasNext()) {
                  String name = reader.nextName();
                  if (name.equals("id")) {
                    id = reader.nextLong();
                  } else if (name.equals("text")) {
                    text = reader.nextString();
                  } else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
                    geo = readDoublesArray(reader);
                  } else if (name.equals("user")) {
                    user = readUser(reader);
                  } else {
                    reader.skipValue();
                  }
                }
                reader.endObject();
                return new Message(id, text, user, geo);
              }

              public List<Double> readDoublesArray(JsonReader reader) throws IOException {
                List<Double> doubles = new ArrayList<Double>();

                reader.beginArray();
                while (reader.hasNext()) {
                  doubles.add(reader.nextDouble());
                }
                reader.endArray();
                return doubles;
              }

              public User readUser(JsonReader reader) throws IOException {
                String username = null;
                int followersCount = -1;

                reader.beginObject();
                while (reader.hasNext()) {
                  String name = reader.nextName();
                  if (name.equals("name")) {
                    username = reader.nextString();
                  } else if (name.equals("followers_count")) {
                    followersCount = reader.nextInt();
                  } else {
                    reader.skipValue();
                  }
                }
                reader.endObject();
                return new User(username, followersCount);
              }}

<h3>숫자 처리</h3> 이 판독기를 사용하면 숫자 값을 문자열로 읽고 문자열 값을 숫자로 읽을 수 있습니다. 예를 들어 JSON 배열 [1, "1"] 의 두 요소는 또는 #nextString#nextInt 사용하여 읽을 수 있습니다. 이 동작은 손실 숫자 변환을 방지하기 위한 것입니다. double은 JavaScript의 유일한 숫자 형식이며 같은 9007199254740993 매우 큰 값은 해당 플랫폼에서 정확하게 나타낼 수 없습니다. 정밀도 손실을 최소화하려면 매우 큰 값을 JSON에서 문자열로 작성하고 읽어야 합니다.

각각 JsonReader 은 단일 JSON 스트림을 읽는 데 사용할 수 있습니다. 이 클래스의 인스턴스는 스레드로부터 안전하지 않습니다.

에 대한 Java 설명서입니다 android.util.JsonReader.

이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.

생성자

JsonReader(Reader)

에서 JSON으로 인코딩된 스트림in을 읽는 새 instance 만듭니다.

속성

Class

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
Handle

기본 Android instance 대한 핸들입니다.

(다음에서 상속됨 Object)
HasNext

현재 배열 또는 개체에 다른 요소가 있으면 true를 반환합니다.

JniIdentityHashCode

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
JniPeerMembers

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

Lenient

이 파서가 허용하는 내용에서 자유로워지면 true를 반환합니다. -또는- 이 파서가 허용하는 내용에서 자유로워지도록 구성합니다.

PeerReference

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
ThresholdClass

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)
ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)

메서드

BeginArray()

JSON 스트림에서 다음 토큰을 사용하고 새 배열의 시작이라고 어설션합니다.

BeginArrayAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

BeginObject()

JSON 스트림에서 다음 토큰을 사용하고 새 개체의 시작이라고 어설션합니다.

BeginObjectAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
Close()

이 JSON 판독기와 기본 을 닫습니다 Reader.

Dispose()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
EndArray()

JSON 스트림에서 다음 토큰을 사용하고 현재 배열의 끝임을 어설션합니다.

EndArrayAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

EndObject()

JSON 스트림에서 다음 토큰을 사용하고 현재 개체의 끝이라고 어설션합니다.

EndObjectAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체의 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
NextBoolean()

다음 토큰의 JsonToken#BOOLEAN boolean 값을 반환하여 사용합니다.

NextBooleanAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

NextDouble()

다음 토큰의 JsonToken#NUMBER double 값을 반환하여 사용합니다.

NextDoubleAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

NextInt()

다음 토큰의 JsonToken#NUMBER int 값을 반환하여 사용합니다.

NextIntAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

NextLong()

다음 토큰의 JsonToken#NUMBER long 값을 반환하여 사용합니다.

NextLongAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

NextName()

다음 토큰인 를 JsonToken#NAME property name반환하고 사용합니다.

NextNameAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

NextNull()

JSON 스트림에서 다음 토큰을 사용하고 리터럴 null임을 어설션합니다.

NextNullAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

NextString()

다음 토큰의 JsonToken#STRING string 값을 반환하여 사용합니다.

NextStringAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
Peek()

사용하지 않고 다음 토큰의 형식을 반환합니다.

PeekAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

(다음에서 상속됨 Object)
SkipValue()

다음 값을 재귀적으로 건너뜁니다.

SkipValueAsync()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

ToArray<T>()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
UnregisterFromRuntime()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
Wait()

현재 스레드가 각성될 때까지 대기하도록 합니다. 일반적으로 <알림을<> 받>거나<<> 중단/em>합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IJavaPeerable.Disposed()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

GetJniTypeName(IJavaPeerable)

JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다.

적용 대상