JsonReader Kelas

Definisi

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

[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
Warisan
JsonReader
Atribut
Penerapan

Keterangan

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token. Aliran ini mencakup nilai harfiah (string, angka, boolean, dan null) serta pemisah awal dan akhir objek dan array. Token dilalui dalam urutan kedalaman pertama, urutan yang sama dengan yang muncul di dokumen JSON. Dalam objek JSON, pasangan nama/nilai diwakili oleh satu token.

<h3>Mengurai JSON</h3> Untuk membuat pengurai turun rekursif untuk aliran JSON Anda sendiri, pertama-tama buat metode titik masuk yang membuat JsonReader.

Selanjutnya, buat metode handler untuk setiap struktur dalam teks JSON Anda. Anda akan memerlukan metode untuk setiap jenis objek dan untuk setiap jenis array. <ul>li Dalam penanganan array yang kuat</metode yang kuat>, panggilan < pertama untuk menggunakan kurung buka array.><>#beginArray Kemudian buat perulangan sementara yang mengakumulasi nilai, mengakhiri saat #hasNext salah. Terakhir, baca kurung siku penutup array dengan memanggil #endArray. <li>Dalam <penanganan> objek yang kuat</metode yang kuat>, panggilan #beginObject pertama untuk mengonsumsi kurung kurawal pembuka objek. Kemudian buat perulangan sementara yang menetapkan nilai ke variabel lokal berdasarkan namanya. Perulangan ini harus berakhir ketika #hasNext salah. Terakhir, baca kurung kurawal penutup objek dengan memanggil #endObject. </ul>

Saat objek atau array berlapis ditemui, delegasikan ke metode handler yang sesuai.

Ketika nama yang tidak diketahui ditemui, pengurai ketat harus gagal dengan pengecualian. Pengurai lenient harus memanggil #skipValue() untuk secara rekursif melewati token berlapis nilai, yang mungkin bertentangan.

Jika nilai mungkin null, Anda harus terlebih dahulu memeriksa menggunakan #peek(). Literal null dapat dikonsumsi menggunakan #nextNull() atau #skipValue().

<h3>Contoh</h3> Misalkan kita ingin mengurai aliran pesan seperti berikut:

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

Kode ini mengimplementasikan pengurai untuk struktur di atas:

{@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>Penanganan< Angka/h3> Pembaca ini mengizinkan nilai numerik dibaca sebagai string dan nilai string untuk dibaca sebagai angka. Misalnya, kedua elemen array [1, "1"] JSON dapat dibaca menggunakan #nextInt atau #nextString. Perilaku ini dimaksudkan untuk mencegah konversi numerik yang hilang: ganda adalah satu-satunya jenis numerik JavaScript dan nilai yang sangat besar seperti 9007199254740993 tidak dapat diwakili persis pada platform tersebut. Untuk meminimalkan kehilangan presisi, nilai yang sangat besar harus ditulis dan dibaca sebagai string di JSON.

Masing-masing JsonReader dapat digunakan untuk membaca satu aliran JSON. Instans kelas ini tidak aman utas.

Java dokumentasi untuk android.util.JsonReader.

Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.

Konstruktor

Nama Deskripsi
JsonReader(Reader)

Membuat instans baru yang membaca aliran yang dikodekan JSON dari in.

Properti

Nama Deskripsi
Class

Mengembalikan kelas runtime dari .Object

(Diperoleh dari Object)
Handle

Handel ke instans Android yang mendasar.

(Diperoleh dari Object)
HasNext

Mengembalikan true jika array atau objek saat ini memiliki elemen lain.

JniIdentityHashCode

Mendapatkan kode hash identitas yang ditetapkan ke Java peer ini oleh runtime interop.

(Diperoleh dari Object)
JniManagedPeerState

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
JniPeerMembers

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

Lenient

Mengembalikan true jika pengurai ini liberal dalam apa yang diterimanya. -or- Konfigurasikan pengurai ini agar liberal dalam apa yang diterimanya.

PeerReference

Mendapatkan referensi objek JNI untuk peer Java ini.

(Diperoleh dari Object)
ThresholdClass

API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda.

(Diperoleh dari Object)
ThresholdType

API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda.

(Diperoleh dari Object)

Metode

Nama Deskripsi
BeginArray()

Mengonsumsi token berikutnya dari aliran JSON dan menegaskan bahwa itu adalah awal dari array baru.

BeginArrayAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

BeginObject()

Mengonsumsi token berikutnya dari aliran JSON dan menegaskan bahwa itu adalah awal dari objek baru.

BeginObjectAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

Clone()

Membuat dan mengembalikan salinan objek ini.

(Diperoleh dari Object)
Close()

Menutup pembaca JSON ini dan yang mendasar Reader.

Construct(JniObjectReference, JniObjectReferenceOptions)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
Dispose()

Merilis sumber daya yang dipegang oleh rekan Java ini.

(Diperoleh dari Object)
Dispose(Boolean)

Merilis sumber daya yang dipegang oleh rekan Java ini.

(Diperoleh dari Object)
DisposeUnlessReferenced()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
EndArray()

Mengonsumsi token berikutnya dari aliran JSON dan menegaskan bahwa itu adalah akhir dari array saat ini.

EndArrayAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

EndObject()

Menggunakan token berikutnya dari aliran JSON dan menegaskan bahwa itu adalah akhir dari objek saat ini.

EndObjectAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

Equals(Object)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
Equals(Object)

Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini.

(Diperoleh dari Object)
GetHashCode()

Mengembalikan nilai kode hash untuk objek .

(Diperoleh dari Object)
JavaFinalize()

Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek.

(Diperoleh dari Object)
NextBoolean()

Mengembalikan nilai token berikutnya, mengkonsumsinya JsonToken#BOOLEAN boolean .

NextBooleanAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

NextDouble()

Mengembalikan nilai token berikutnya, mengkonsumsinya JsonToken#NUMBER double .

NextDoubleAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

NextInt()

Mengembalikan nilai token berikutnya, mengkonsumsinya JsonToken#NUMBER int .

NextIntAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

NextLong()

Mengembalikan nilai token berikutnya, mengkonsumsinya JsonToken#NUMBER long .

NextLongAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

NextName()

Mengembalikan token berikutnya, , JsonToken#NAME property namedan mengonsumsinya.

NextNameAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

NextNull()

Mengonsumsi token berikutnya dari aliran JSON dan menegaskan bahwa itu adalah null harfiah.

NextNullAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

NextString()

Mengembalikan nilai token berikutnya, mengkonsumsinya JsonToken#STRING string .

NextStringAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

Notify()

Membangunkan satu utas yang menunggu monitor objek ini.

(Diperoleh dari Object)
NotifyAll()

Membangunkan semua utas yang menunggu monitor objek ini.

(Diperoleh dari Object)
Peek()

Mengembalikan jenis token berikutnya tanpa mengkonsumsinya.

PeekAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

SetHandle(IntPtr, JniHandleOwnership)

Mengatur properti Handle.

(Diperoleh dari Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
SkipValue()

Melewati nilai berikutnya secara rekursif.

SkipValueAsync()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

ToArray<T>()

Membuat array terkelola dari pembungkus array Java ini.

(Diperoleh dari Object)
ToString()

Mengembalikan representasi string objek.

(Diperoleh dari Object)
UnregisterFromRuntime()

Membatalkan pendaftaran peer Java ini dari runtime interop.

(Diperoleh dari Object)
Wait()

Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <diberitahu></em> atau <em>terganggu</em>.

(Diperoleh dari Object)
Wait(Int64, Int32)

Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah waktu nyata berlalu.

(Diperoleh dari Object)
Wait(Int64)

Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah waktu nyata berlalu.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

Nama Deskripsi
IJavaPeerable.Disposed()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
IJavaPeerable.Finalized()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

(Diperoleh dari JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

Metode Ekstensi

Nama Deskripsi
GetJniTypeName(IJavaPeerable)

Mendapatkan nama JNI dari jenis instans self.

JavaAs<TResult>(IJavaPeerable)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

JavaCast<TResult>(IJavaObject)

Melakukan konversi jenis yang diperiksa runtime Android.

JavaCast<TResult>(IJavaObject)

Membaca nilai yang dikodekan JSON (RFC 4627) sebagai aliran token.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

Berlaku untuk