JsonReader Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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 |
Propiedades
| Nombre | Description |
|---|---|
| Class |
Devuelve la clase en tiempo de ejecución de este |
| 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 |
| 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 |
| NextBooleanAsync() |
Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens. |
| NextDouble() |
Devuelve el |
| NextDoubleAsync() |
Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens. |
| NextInt() |
Devuelve el |
| NextIntAsync() |
Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens. |
| NextLong() |
Devuelve el |
| NextLongAsync() |
Lee un valor codificado en JSON (RFC 4627) como un flujo de tokens. |
| NextName() |
Devuelve el siguiente token, un |
| 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 |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Intente coerción |
| 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 |