Sprache

JsonReader Klasse

Definition

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
JsonReader
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 inder ein JSON-codierter Datenstrom gelesen wird.

Eigenschaften

Name Beschreibung
Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
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 Reader.

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 JsonToken#BOOLEAN boolean Wert des nächsten Tokens zurück, das es verwendet.

NextBooleanAsync()

Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token.

NextDouble()

Gibt den JsonToken#NUMBER double Wert des nächsten Tokens zurück, das es verwendet.

NextDoubleAsync()

Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token.

NextInt()

Gibt den JsonToken#NUMBER int Wert des nächsten Tokens zurück, das es verwendet.

NextIntAsync()

Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token.

NextLong()

Gibt den JsonToken#NUMBER long Wert des nächsten Tokens zurück, das es verwendet.

NextLongAsync()

Liest einen JSON-Codierten WERT (RFC 4627) als Datenstrom von Token.

NextName()

Gibt das nächste Token, ein JsonToken#NAME property name, und verwendet es.

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 JsonToken#STRING string Wert des nächsten Tokens zurück, das es verwendet.

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 selfab.

JavaAs<TResult>(IJavaPeerable)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

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 selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

Gilt für: