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
- Наследование
- Атрибуты
- Реализации
Комментарии
Считывает значение в кодировке 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 из |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
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 и базовый |
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() |
|
NextBooleanAsync() |
Считывает значение в кодировке JSON (RFC 4627) в виде потока токенов. |
NextDouble() |
|
NextDoubleAsync() |
Считывает значение в кодировке JSON (RFC 4627) в виде потока токенов. |
NextInt() |
|
NextIntAsync() |
Считывает значение в кодировке JSON (RFC 4627) в виде потока токенов. |
NextLong() |
|
NextLongAsync() |
Считывает значение в кодировке JSON (RFC 4627) в виде потока токенов. |
NextName() |
Возвращает следующий токен , и |
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) |
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) в виде потока токенов. |