JsonReader Klasse

Definition

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

[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
Vererbung
JsonReader
Attribute
Implementiert

Hinweise

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom. Dieser Stream enthält sowohl Literalwerte (Zeichenfolgen, Zahlen, Boolesche und NULL-Werte) als auch die Anfangs- und Endtrennzeichen von Objekten und Arrays. Die Token werden in der ersten Reihenfolge durchlaufen, in der gleichen Reihenfolge wie im JSON-Dokument. Innerhalb von JSON-Objekten werden Name-Wert-Paare durch ein einzelnes Token dargestellt.

<h3-Analyse>von JSON</h3> Um einen rekursiven Abstiegsparser für Ihre eigenen JSON-Datenströme zu erstellen, erstellen Sie zuerst eine Einstiegspunktmethode, die einen JsonReadererstellt.

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>Bei <starken>Arraybehandlungs<-/starken> Methoden rufen Sie #beginArray zuerst auf, um die öffnende Klammer des Arrays zu nutzen. Erstellen Sie dann eine While-Schleife, die Werte sammelt und beendet, wenn #hasNext false ist. Lesen Sie abschließend die schließende Klammer des Arrays, indem Sie aufrufen #endArray. <li>Bei <starken>Methoden zur Objektbehandlung</-stärke> rufen Sie #beginObject zuerst auf, um die öffnende Klammer des Objekts zu nutzen. Erstellen Sie dann eine while-Schleife, die lokalen Variablen basierend auf ihrem Namen Werte zuweist. Diese Schleife sollte beendet werden, wenn #hasNext false ist. Lesen Sie abschließend die schließende Klammer des Objekts, indem Sie 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 einer Ausnahme fehlschlagen. Lenient-Parser sollten aufrufen #skipValue() , um die geschachtelten Token des Werts rekursiv zu überspringen, was andernfalls zu Konflikten führen kann.

Wenn ein Wert möglicherweise NULL ist, sollten Sie zuerst überprüfen, indem #peek()Sie verwenden. NULL-Literale können mit oder #nextNull()#skipValue()verwendet werden.

<h3>Beispiel</h3> Angenommen, wir möchten einen Nachrichtenstrom wie den folgenden analysieren:

{@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>Number Handling</h3> Mit diesem Reader können numerische Werte als Zeichenfolgen und Zeichenfolgenwerte als Zahlen gelesen werden. Beispielsweise können beide Elemente des JSON-Arrays [1, "1"] entweder mit #nextInt oder #nextStringgelesen werden. Dieses Verhalten soll verlustbehaftete numerische Konvertierungen verhindern: Double ist der einzige numerische Typ von JavaScript, und sehr große Werte wie können 9007199254740993 nicht genau auf dieser Plattform dargestellt werden. Um Genauigkeitsverluste zu minimieren, sollten extrem große Werte als Zeichenfolgen in JSON geschrieben und gelesen werden.

Jede JsonReader kann verwendet werden, um einen einzelnen JSON-Stream zu lesen. Instanzen dieser Klasse sind nicht threadsicher.

Java-Dokumentation für android.util.JsonReader.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

JsonReader(Reader)

Erstellt eine neue instance, die einen JSON-codierten Stream aus inliest.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
Handle

Das Handle zum zugrunde liegenden Android-instance.

(Geerbt von Object)
HasNext

Gibt true zurück, wenn das aktuelle Array oder Objekt über ein anderes Element verfügt.

JniIdentityHashCode

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
JniPeerMembers

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

Lenient

Gibt true zurück, wenn dieser Parser in dem, was er akzeptiert, liberal ist. - oder: Konfigurieren Sie diesen Parser so, dass er in dem, was er akzeptiert, liberal ist.

PeerReference

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(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

BeginArray()

Verwendet das nächste Token aus dem JSON-Stream und gibt an, dass es der Anfang eines neuen Arrays ist.

BeginArrayAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

BeginObject()

Verwendet das nächste Token aus dem JSON-Stream und gibt an, dass es der Anfang eines neuen Objekts ist.

BeginObjectAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
Close()

Schließt diesen JSON-Reader und den zugrunde liegenden Reader.

Dispose()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
Dispose(Boolean)

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
EndArray()

Verwendet das nächste Token aus dem JSON-Stream und gibt an, dass es das Ende des aktuellen Arrays ist.

EndArrayAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

EndObject()

Verwendet das nächste Token aus dem JSON-Stream und gibt an, dass es das Ende des aktuellen Objekts ist.

EndObjectAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

Equals(Object)

Gibt an, ob ein anderes Objekt diesem "gleich" 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 feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
NextBoolean()

Gibt den JsonToken#BOOLEAN boolean Wert des nächsten Tokens zurück und verwendet es.

NextBooleanAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

NextDouble()

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

NextDoubleAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

NextInt()

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

NextIntAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

NextLong()

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

NextLongAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

NextName()

Gibt das nächste Token zurück, und JsonToken#NAME property nameverwendet es.

NextNameAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

NextNull()

Verwendet das nächste Token aus dem JSON-Stream und gibt an, dass es sich um einen Literal-NULL-Wert handelt.

NextNullAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

NextString()

Gibt den JsonToken#STRING string Wert des nächsten Tokens zurück und verwendet es.

NextStringAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

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

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
SkipValue()

Überspringt den nächsten Wert rekursiv.

SkipValueAsync()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

ToArray<T>()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<><

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
IJavaPeerable.Finalized()

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Für Android-Runtime überprüfte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

GetJniTypeName(IJavaPeerable)

Liest einen JSON-codierten Wert (RFC 4627) als Tokenstrom.

Gilt für: