JsonReader Класс

Определение

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

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

Комментарии

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

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

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

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

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

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

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

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

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

JsonReader(Reader)

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

Свойства

Class

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

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

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

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

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

JniIdentityHashCode

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

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

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

Lenient

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

PeerReference

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

(Унаследовано от 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объект .

Dispose()

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

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

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

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

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

EndArrayAsync()

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

EndObject()

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

EndObjectAsync()

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

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()

Возвращает следующий токен , и 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)
SkipValue()

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

SkipValueAsync()

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

ToArray<T>()

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

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

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

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

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

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

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>.

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

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

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

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

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

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

IJavaPeerable.Disposed()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

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