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
- Наследование
- Атрибуты
- Реализации
Комментарии
Считывает закодированное значение 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) |
Создает новый экземпляр, из который считывает поток |
Свойства
| Имя | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| 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 и базовый |
| 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() |
|
| NextBooleanAsync() |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| NextDouble() |
|
| NextDoubleAsync() |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| NextInt() |
|
| NextIntAsync() |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| NextLong() |
|
| NextLongAsync() |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| NextName() |
Возвращает следующий маркер, a |
| NextNameAsync() |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| NextNull() |
Использует следующий маркер из потока JSON и утверждает, что это литерал NULL. |
| NextNullAsync() |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| NextString() |
|
| 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 типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Считывает закодированное значение JSON (RFC 4627) в виде потока маркеров. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |