JsonReader Класс

Определение

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

[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
Наследование
JsonReader
Атрибуты
Реализации

Комментарии

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. Этот поток включает как литеральные значения (строки, числа, логические значения и значения NULL), так и начальные и конечные разделители объектов и массивов. Маркеры пересекаются в порядке глубины, то же порядке, что они отображаются в документе JSON. В объектах JSON пары "имя-значение" представлены одним маркером.

<H3>Анализ JSON</h3> Для создания рекурсивного средства синтаксического спуска для собственных потоков JSON сначала создайте метод точки входа, который создает JsonReader.

Затем создайте методы обработчика для каждой структуры в тексте JSON. Вам потребуется метод для каждого типа объекта и для каждого типа массива. <ul>li Внутри обработки и сильных<> методов обработки массива, сначала вызывается < для использования открывающей скобки массива.><>#beginArray Затем создайте цикл в то время, который накапливает значения, завершая при #hasNext значении false. Наконец, считывает закрывающая скобку массива путем вызова #endArray. <li>Внутри <строгих>методов обработки< и сильных> объектов сначала вызывается для #beginObject использования открывающей фигурной скобки объекта. Затем создайте цикл while, который назначает значения локальным переменным на основе их имени. Этот цикл должен завершаться, если #hasNext имеет значение false. Наконец, прочитайте закрывающую скобку объекта путем вызова #endObject. </ul>

При обнаружении вложенного объекта или массива делегировать соответствующему методу обработчика.

При обнаружении неизвестного имени строгие средства синтаксического анализа должны завершиться ошибкой с исключением. Lenient синтаксический анализ должен вызывать #skipValue() рекурсивно пропускать вложенные маркеры значения, которые в противном случае могут конфликтовать.

Если значение может иметь значение NULL, необходимо сначала проверить использование #peek(). Литералы NULL можно использовать с помощью любого #nextNull() или #skipValue().

<H3>Example</h3> Предположим, что мы хотим проанализировать поток сообщений, например следующее:

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

Этот код реализует средство синтаксического анализа для приведенной выше структуры:

{@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> Это средство чтения позволяет считать числовые значения в виде строк и строковых значений, которые будут считываться в виде чисел. Например, оба элемента массива [1, "1"] JSON могут считываться с помощью одного #nextInt или #nextString. Это поведение предназначено для предотвращения потери числовых преобразований: double является единственным числовым типом JavaScript и очень большими значениями, такими как 9007199254740993 невозможно представить именно на этой платформе. Чтобы свести к минимуму потерю точности, крайне большие значения должны записываться и считываться как строки в ФОРМАТЕ JSON.

Каждый из них JsonReader можно использовать для чтения одного потока JSON. Экземпляры этого класса не являются потокобезопасны.

Java документации по android.util.JsonReader.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Конструкторы

Имя Описание
JsonReader(Reader)

Создает новый экземпляр, из который считывает поток inв кодировке JSON.

Свойства

Имя Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
HasNext

Возвращает значение true, если текущий массив или объект имеет другой элемент.

JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
JniPeerMembers

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

Lenient

Возвращает значение true, если этот синтаксический анализ является либеральным в том, что он принимает. -или- Настройте этот синтаксический анализатор, чтобы быть либеральным в том, что он принимает.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)

Методы

Имя Описание
BeginArray()

Использует следующий маркер из потока JSON и утверждает, что он является началом нового массива.

BeginArrayAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

BeginObject()

Использует следующий маркер из потока JSON и утверждает, что он является началом нового объекта.

BeginObjectAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Close()

Закрывает этот модуль чтения JSON и базовый Readerобъект.

Construct(JniObjectReference, JniObjectReferenceOptions)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
EndArray()

Использует следующий маркер из потока JSON и утверждает, что это конец текущего массива.

EndArrayAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

EndObject()

Использует следующий маркер из потока JSON и утверждает, что это конец текущего объекта.

EndObjectAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

Equals(Object)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает хэш-значение кода для объекта.

(Унаследовано от Object)
JavaFinalize()

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
NextBoolean()

JsonToken#BOOLEAN boolean Возвращает значение следующего маркера, потребляя его.

NextBooleanAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

NextDouble()

JsonToken#NUMBER double Возвращает значение следующего маркера, потребляя его.

NextDoubleAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

NextInt()

JsonToken#NUMBER int Возвращает значение следующего маркера, потребляя его.

NextIntAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

NextLong()

JsonToken#NUMBER long Возвращает значение следующего маркера, потребляя его.

NextLongAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

NextName()

Возвращает следующий маркер, a JsonToken#NAME property nameи использует его.

NextNameAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

NextNull()

Использует следующий маркер из потока JSON и утверждает, что это литерал NULL.

NextNullAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

NextString()

JsonToken#STRING string Возвращает значение следующего маркера, потребляя его.

NextStringAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

Notify()

Просыпается один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
Peek()

Возвращает тип следующего маркера без его использования.

PeekAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
SkipValue()

Пропускает следующее значение рекурсивно.

SkipValueAsync()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.>

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя Описание
IJavaPeerable.Disposed()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

(Унаследовано от JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

Методы расширения

Имя Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к