JsonReader 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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
- 상속
- 특성
- 구현
설명
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으로 인코딩된 스트림 |
속성
Class |
이 |
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 판독기와 기본 을 닫습니다 |
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() |
다음 토큰의 |
NextBooleanAsync() |
JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. |
NextDouble() |
다음 토큰의 |
NextDoubleAsync() |
JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. |
NextInt() |
다음 토큰의 |
NextIntAsync() |
JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. |
NextLong() |
다음 토큰의 |
NextLongAsync() |
JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. |
NextName() |
다음 토큰인 를 |
NextNameAsync() |
JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. |
NextNull() |
JSON 스트림에서 다음 토큰을 사용하고 리터럴 null임을 어설션합니다. |
NextNullAsync() |
JSON(RFC 4627) 인코딩된 값을 토큰 스트림으로 읽습니다. |
NextString() |
다음 토큰의 |
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) 인코딩된 값을 토큰 스트림으로 읽습니다. |