JsonReader Clase

Definición

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

[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
Herencia
JsonReader
Atributos
Implementaciones

Comentarios

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens. Esta secuencia incluye ambos valores literales (cadenas, números, booleanos y valores NULL), así como los delimitadores iniciales y finales de objetos y matrices. Los tokens se recorren en orden detallado, el mismo orden que aparecen en el documento JSON. Dentro de los objetos JSON, los pares nombre-valor se representan mediante un solo token.

<h3>Analizar JSON/h3< Para crear un analizador de descenso recursivo para sus propios flujos JSON>, cree primero un método de punto de entrada que cree un JsonReader.

A continuación, cree métodos de controlador para cada estructura en el texto JSON. Necesitará un método para cada tipo de objeto y para cada tipo de matriz. <ul><li>Dentro de <los métodos fuertes o de control> de matrices fuertes<>, primero llame #beginArray a para consumir el corchete de apertura de la matriz. A continuación, cree un bucle while que acumula valores, finalizando cuando #hasNext es false. Por último, lea el corchete de cierre de la matriz llamando a #endArray. <li>Dentro de <los métodos fuertes>de control< de objetos/fuertes> , primero llame #beginObject a para consumir la llave de apertura del objeto. A continuación, cree un bucle while que asigne valores a variables locales en función de su nombre. Este bucle debe finalizar cuando #hasNext es false. Por último, lea la llave de cierre del objeto llamando a #endObject. </ul>

Cuando se encuentra un objeto o matriz anidado, delegue al método de controlador correspondiente.

Cuando se encuentra un nombre desconocido, los analizadores estrictos deben producir un error con una excepción. Los analizadores lenientos deben llamar #skipValue() a para omitir recursivamente los tokens anidados del valor, lo que puede entrar en conflicto de otro modo.

Si un valor puede ser NULL, primero debe comprobar mediante #peek(). Los literales NULL se pueden consumir mediante #nextNull() o #skipValue().

<h3>Ejemplo</h3> Supongamos que nos gustaría analizar una secuencia de mensajes como los siguientes:

{@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
                }
              }
            ]}

Este código implementa el analizador para la estructura anterior:

{@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>Control de< números/h3> Este lector permite que los valores numéricos se lean como cadenas y valores de cadena como números. Por ejemplo, ambos elementos de la matriz [1, "1"] JSON pueden leerse mediante #nextInt o #nextString. Este comportamiento está pensado para evitar conversiones numéricas de pérdida: double es el único tipo numérico de JavaScript y valores muy grandes como 9007199254740993 no se pueden representar exactamente en esa plataforma. Para minimizar la pérdida de precisión, los valores extremadamente grandes deben escribirse y leerse como cadenas en JSON.

Cada JsonReader uno se puede usar para leer una sola secuencia JSON. Las instancias de esta clase no son seguras para subprocesos.

Java documentación para android.util.JsonReader.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Constructores

Nombre Description
JsonReader(Reader)

Crea una nueva instancia que lee una secuencia codificada en JSON de in.

Propiedades

Nombre Description
Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
HasNext

Devuelve true si la matriz o el objeto actual tienen otro elemento.

JniIdentityHashCode

Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad.

(Heredado de Object)
JniManagedPeerState

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
JniPeerMembers

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

Lenient

Devuelve true si este analizador es liberal en lo que acepta. -o bien- Configure este analizador para que sea liberal en lo que acepta.

PeerReference

Obtiene la referencia de objeto JNI para este Java del mismo nivel.

(Heredado de Object)
ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)
ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)

Métodos

Nombre Description
BeginArray()

Consume el siguiente token de la secuencia JSON y afirma que es el principio de una nueva matriz.

BeginArrayAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

BeginObject()

Consume el siguiente token de la secuencia JSON y afirma que es el principio de un nuevo objeto.

BeginObjectAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Close()

Cierra este lector JSON y el subyacente Reader.

Construct(JniObjectReference, JniObjectReferenceOptions)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
Dispose()

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Dispose(Boolean)

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
DisposeUnlessReferenced()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
EndArray()

Consume el siguiente token de la secuencia JSON y afirma que es el final de la matriz actual.

EndArrayAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

EndObject()

Consume el siguiente token de la secuencia JSON y afirma que es el final del objeto actual.

EndObjectAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

Equals(Object)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash para el objeto .

(Heredado de Object)
JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
NextBoolean()

Devuelve el JsonToken#BOOLEAN boolean valor del siguiente token, que lo consume.

NextBooleanAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

NextDouble()

Devuelve el JsonToken#NUMBER double valor del siguiente token, que lo consume.

NextDoubleAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

NextInt()

Devuelve el JsonToken#NUMBER int valor del siguiente token, que lo consume.

NextIntAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

NextLong()

Devuelve el JsonToken#NUMBER long valor del siguiente token, que lo consume.

NextLongAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

NextName()

Devuelve el siguiente token, un JsonToken#NAME property namey lo consume.

NextNameAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

NextNull()

Consume el siguiente token de la secuencia JSON y afirma que es un literal NULL.

NextNullAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

NextString()

Devuelve el JsonToken#STRING string valor del siguiente token, que lo consume.

NextStringAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
Peek()

Devuelve el tipo del siguiente token sin consumirlo.

PeekAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
SkipValue()

Omite el siguiente valor de forma recursiva.

SkipValueAsync()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

ToArray<T>()

Crea una matriz administrada a partir de este contenedor de matriz Java.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto .

(Heredado de Object)
UnregisterFromRuntime()

Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><>

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

Nombre Description
IJavaPeerable.Disposed()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
IJavaPeerable.Finalized()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

(Heredado de JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

Métodos de extensión

Nombre Description
GetJniTypeName(IJavaPeerable)

Obtiene el nombre JNI del tipo de la instancia self.

JavaAs<TResult>(IJavaPeerable)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

Se aplica a