JsonReader Classe

Definição

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

[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
Herança
JsonReader
Atributos
Implementações

Comentários

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens. Esse fluxo inclui valores literais (cadeias de caracteres, números, boolianos e nulos), bem como delimitadores de início e término de objetos e matrizes. Os tokens são percorridos em ordem detalhada, a mesma ordem que aparecem no documento JSON. Dentro de objetos JSON, pares de nome/valor são representados por um único token.

<h3>Analisando JSON</h3> Para criar um analisador descendente recursivo para seus próprios fluxos JSON, primeiro crie um método de ponto de entrada que crie um JsonReader.

Em seguida, crie métodos de manipulador para cada estrutura em seu texto JSON. Você precisará de um método para cada tipo de objeto e para cada tipo de matriz. <ul><li>Dentro <de métodos fortes>de manipulação< de matriz/métodos fortes> , primeira chamada #beginArray para consumir o colchete de abertura da matriz. Em seguida, crie um loop while que acumula valores, encerrando quando #hasNext for false. Por fim, leia o colchete de fechamento da matriz chamando #endArray. <li>Dentro <de métodos fortes>de manipulação< de objetos/métodos fortes> , primeira chamada #beginObject para consumir a chave de abertura do objeto. Em seguida, crie um loop while que atribua valores a variáveis locais com base em seu nome. Esse loop deve ser encerrado quando #hasNext for falso. Por fim, leia a chave de fechamento do objeto chamando #endObject. </ul>

Quando um objeto aninhado ou matriz é encontrado, delegar ao método de manipulador correspondente.

Quando um nome desconhecido é encontrado, analisadores estritos devem falhar com uma exceção. Os analisadores brandos devem chamar #skipValue() para ignorar novamente os tokens aninhados do valor, o que pode entrar em conflito.

Se um valor puder ser nulo, primeiro você deverá verificar usando #peek(). Literais nulos podem ser consumidos usando ou #nextNull()#skipValue().

<h3>Exemplo</h3> Suponha que gostaríamos de analisar um fluxo de mensagens, como o seguinte:

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

Esse código implementa o analisador para a estrutura acima:

{@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>Tratamento< de Número/h3> Este leitor permite que valores numéricos sejam lidos como cadeias de caracteres e valores de cadeia de caracteres a serem lidos como números. Por exemplo, ambos os elementos da matriz [1, "1"] JSON podem ser lidos usando ou #nextInt#nextString. Esse comportamento destina-se a evitar conversões numéricas com perda: o duplo é o único tipo numérico do JavaScript e valores muito grandes, como 9007199254740993 não podem ser representados exatamente nessa plataforma. Para minimizar a perda de precisão, valores extremamente grandes devem ser gravados e lidos como cadeias de caracteres no JSON.

Cada JsonReader um pode ser usado para ler um único fluxo JSON. As instâncias dessa classe não são thread-safe.

Documentação Java para android.util.JsonReader.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usadas de acordo com os termos descritos na Licença de Atribuição Creative Commons 2.5.

Construtores

Nome Description
JsonReader(Reader)

Cria uma nova instância que lê um fluxo codificado em JSON de in.

Propriedades

Nome Description
Class

Retorna a classe de runtime deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
HasNext

Retornará true se a matriz ou objeto atual tiver outro elemento.

JniIdentityHashCode

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
JniPeerMembers

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

Lenient

Retorna true se este analisador é liberal no que aceita. -ou- Configure esse analisador para ser liberal no que ele aceita.

PeerReference

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
ThresholdClass

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
ThresholdType

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)

Métodos

Nome Description
BeginArray()

Consome o próximo token do fluxo JSON e afirma que ele é o início de uma nova matriz.

BeginArrayAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

BeginObject()

Consome o próximo token do fluxo JSON e afirma que ele é o início de um novo objeto.

BeginObjectAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
Close()

Fecha este leitor JSON e o subjacente Reader.

Dispose()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
Dispose(Boolean)

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
EndArray()

Consome o próximo token do fluxo JSON e afirma que ele é o final da matriz atual.

EndArrayAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

EndObject()

Consome o próximo token do fluxo JSON e afirma que ele é o final do objeto atual.

EndObjectAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

Equals(Object)

Indica se algum outro objeto é "igual a" este.

(Herdado de Object)
GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
NextBoolean()

Retorna o JsonToken#BOOLEAN boolean valor do próximo token, consumindo-o.

NextBooleanAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

NextDouble()

Retorna o JsonToken#NUMBER double valor do próximo token, consumindo-o.

NextDoubleAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

NextInt()

Retorna o JsonToken#NUMBER int valor do próximo token, consumindo-o.

NextIntAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

NextLong()

Retorna o JsonToken#NUMBER long valor do próximo token, consumindo-o.

NextLongAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

NextName()

Retorna o próximo token, um JsonToken#NAME property namee o consome.

NextNameAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

NextNull()

Consome o próximo token do fluxo JSON e afirma que ele é um nulo literal.

NextNullAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

NextString()

Retorna o JsonToken#STRING string valor do próximo token, consumindo-o.

NextStringAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
Peek()

Retorna o tipo do próximo token sem consumi-lo.

PeekAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle

(Herdado de Object)
SkipValue()

Ignora o próximo valor recursivamente.

SkipValueAsync()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

ToArray<T>()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
Wait()

Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<>

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
IJavaPeerable.Disposed()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
IJavaPeerable.Finalized()

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
IJavaPeerable.JniManagedPeerState

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

(Herdado de Object)

Métodos de Extensão

Nome Description
GetJniTypeName(IJavaPeerable)

Obtém o nome JNI do tipo da instância self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo marcada por runtime do Android.

JavaCast<TResult>(IJavaObject)

Lê um valor codificado em JSON (RFC 4627) como um fluxo de tokens.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a