JsonReader Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token.
[Android.Runtime.Register("android/util/JsonReader", DoNotGenerateAcw=true)]
public sealed class JsonReader : Java.Lang.Object, IDisposable, Java.IO.ICloseable
[<Android.Runtime.Register("android/util/JsonReader", DoNotGenerateAcw=true)>]
type JsonReader = class
inherit Object
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Vererbung
- Attribute
- Implementiert
Hinweise
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. Dieser Datenstrom enthält sowohl Literalwerte (Zeichenfolgen, Zahlen, Booleane und NULL-Werte) als auch die Anfangs- und Endtrennzeichen von Objekten und Arrays. Die Token werden in der ersten Reihenfolge durchlaufen, die gleiche Reihenfolge wie im JSON-Dokument. Innerhalb von JSON-Objekten werden Name/Wert-Paare durch ein einzelnes Token dargestellt.
<h3>Parsing JSON</h3> Um einen rekursiven Abstiegsparser für Ihre eigenen JSON-Streams zu erstellen, erstellen Sie zuerst eine Einstiegspunktmethode, die eine JsonReader.
Erstellen Sie als Nächstes Handlermethoden für jede Struktur in Ihrem JSON-Text. Sie benötigen eine Methode für jeden Objekttyp und für jeden Arraytyp.
<ul><li>Innerhalb <einer starken>Arraybehandlung</starke> Methoden, rufen Sie zuerst #beginArray auf, um die öffnende Klammer des Arrays zu nutzen. Erstellen Sie dann eine While-Schleife, die Werte ansammelt und beendet wird, wenn #hasNext "false" ist. Lesen Sie schließlich die schließende Klammer des Arrays durch Aufrufen.#endArray
<li>Innerhalb <einer starken>Objektbehandlung</starken> Methoden wird zuerst aufgerufen #beginObject , um die öffnende Klammer des Objekts zu nutzen. Erstellen Sie dann eine While-Schleife, die basierend auf ihrem Namen Werte lokalen Variablen zuweist. Diese Schleife sollte beendet werden, wenn #hasNext "false" ist. Lesen Sie schließlich die schließende geschweifte Klammer des Objekts durch Aufrufen #endObject.
</ul>
Wenn ein geschachteltes Objekt oder array gefunden wird, delegieren Sie an die entsprechende Handlermethode.
Wenn ein unbekannter Name gefunden wird, sollten strenge Parser mit ausnahmefehlern. Lenient parsers should call #skipValue() to rekursive skip the value's nested tokens, which may otherwise conflict.
Wenn ein Wert möglicherweise null ist, sollten Sie zuerst die Verwendung überprüfen #peek(). Nullliterale können entweder oder #nextNull()#skipValue()verwendet werden.
<h3>Beispiel</h3> Angenommen, wir möchten einen Datenstrom von Nachrichten analysieren, z. B. folgendes:
{@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
}
}
]}
Dieser Code implementiert den Parser für die obige Struktur:
{@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>Zahlenbehandlung</h3> Dieser Reader erlaubt es, numerische Werte als Zeichenfolgen und Zeichenfolgenwerte als Zahlen zu lesen. Beispielsweise können beide Elemente des JSON-Arrays [1, "1"] entweder oder #nextInt#nextString. Dieses Verhalten dient dazu, verlustbehaftete numerische Konvertierungen zu verhindern: Double ist der einzige numerische Typ von JavaScript und sehr große Werte wie 9007199254740993 können nicht genau auf dieser Plattform dargestellt werden. Um Genauigkeitsverluste zu minimieren, sollten extrem große Werte in JSON geschrieben und als Zeichenfolgen gelesen werden.
Jeder JsonReader kann zum Lesen eines einzelnen JSON-Datenstroms verwendet werden. Instanzen dieser Klasse sind nicht threadsicher.
Java Dokumentation für android.util.JsonReader.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
| Name | Beschreibung |
|---|---|
| JsonReader(Reader) |
Erstellt eine neue Instanz, aus |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Class |
Gibt die Laufzeitklasse dieses Werts |
| Handle |
Das Handle für die zugrunde liegende Android-Instanz. (Geerbt von Object) |
| HasNext |
Gibt true zurück, wenn das aktuelle Array oder Objekt ein anderes Element aufweist. |
| JniIdentityHashCode |
Ruft den Identitätshashcode ab, der diesem Java Peer von der Interop-Laufzeit zugewiesen ist. (Geerbt von Object) |
| JniManagedPeerState |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| JniPeerMembers |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| Lenient |
Gibt "true" zurück, wenn dieser Parser liberal ist, was er akzeptiert. -oder- Konfigurieren Sie diesen Parser so, dass er liberal ist, was er akzeptiert. |
| PeerReference |
Ruft den JNI-Objektverweis für diesen Java Peer ab. (Geerbt von Object) |
| ThresholdClass |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. (Geerbt von Object) |
| ThresholdType |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. (Geerbt von Object) |
Methoden
| Name | Beschreibung |
|---|---|
| BeginArray() |
Nutzt das nächste Token aus dem JSON-Datenstrom und bestätigt, dass es der Anfang eines neuen Arrays ist. |
| BeginArrayAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| BeginObject() |
Verwendet das nächste Token aus dem JSON-Datenstrom und bestätigt, dass es der Anfang eines neuen Objekts ist. |
| BeginObjectAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
| Close() |
Schließt diesen JSON-Reader und den zugrunde liegenden |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| Dispose() |
Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden. (Geerbt von Object) |
| Dispose(Boolean) |
Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden. (Geerbt von Object) |
| DisposeUnlessReferenced() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| EndArray() |
Verwendet das nächste Token aus dem JSON-Datenstrom und bestätigt, dass es das Ende des aktuellen Arrays ist. |
| EndArrayAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| EndObject() |
Verwendet das nächste Token aus dem JSON-Datenstrom und bestätigt, dass es das Ende des aktuellen Objekts ist. |
| EndObjectAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| Equals(Object) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist. (Geerbt von Object) |
| GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
| JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind. (Geerbt von Object) |
| NextBoolean() |
Gibt den |
| NextBooleanAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| NextDouble() |
Gibt den |
| NextDoubleAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| NextInt() |
Gibt den |
| NextIntAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| NextLong() |
Gibt den |
| NextLongAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| NextName() |
Gibt das nächste Token, ein |
| NextNameAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| NextNull() |
Verwendet das nächste Token aus dem JSON-Datenstrom und bestätigt, dass es sich um einen Literal null handelt. |
| NextNullAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| NextString() |
Gibt den |
| NextStringAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| Notify() |
Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet. (Geerbt von Object) |
| NotifyAll() |
Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten. (Geerbt von Object) |
| Peek() |
Gibt den Typ des nächsten Tokens zurück, ohne es zu verwenden. |
| PeekAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| SkipValue() |
Überspringt den nächsten Wert rekursiv. |
| SkipValueAsync() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| ToArray<T>() |
Erstellt ein verwaltetes Array aus diesem Java Arraywrapper. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
| UnregisterFromRuntime() |
Hebt die Registrierung dieses Java Peers aus der Interop-Laufzeit auf. (Geerbt von Object) |
| Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em< oder >em<unterbrochen>/em<.><> (Geerbt von Object) |
| Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
| Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IJavaPeerable.Disposed() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| IJavaPeerable.Finalized() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. (Geerbt von JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ruft den JNI-Namen des Typs der Instanz |
| JavaAs<TResult>(IJavaPeerable) |
Versuchen Sie, die Eingabe |
| JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
| JavaCast<TResult>(IJavaObject) |
Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Versuchen Sie, die Eingabe |