言語

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 オブジェクト内では、名前と値のペアは 1 つのトークンで表されます。

<h3> JSON</h3> 独自の JSON ストリーム用の再帰的な降下パーサーを作成するには、まず、 JsonReaderを作成するエントリ ポイント メソッドを作成します。

次に、JSON テキスト内の各構造体のハンドラー メソッドを作成します。 各オブジェクト型と配列型ごとにメソッドが必要です。 <ul><li>Within <strong>array handling</strong> メソッドは、最初に #beginArray を呼び出して配列の開始角かっこを使用します。 次に、値を蓄積する while ループを作成し、 #hasNext が false の場合に終了します。 最後に、 #endArrayを呼び出して、配列の終わり角かっこを読み取る。 <li>Within <strong>object handling</strong> メソッドは、最初に #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> このリーダーは、数値を文字列として読み取り、文字列値を数値として読み取るようにします。 たとえば、JSON 配列 [1, "1"] の両方の要素は、 #nextInt または #nextStringを使用して読み取られます。 この動作は、損失の多い数値変換を防ぐことを目的としています。double は JavaScript の唯一の数値型であり、 9007199254740993 のような非常に大きな値は、そのプラットフォームで正確に表すことはできません。 精度の低下を最小限に抑えるには、JSON で非常に大きな値を書き込み、文字列として読み取る必要があります。

JsonReader を使用して、1 つの JSON ストリームを読み取ります。 このクラスのインスタンスはスレッド セーフではありません。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

名前 説明
JsonReader(Reader)

inから JSON でエンコードされたストリームを読み取る新しいインスタンスを作成します。

プロパティ

名前 説明
Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
HasNext

現在の配列またはオブジェクトに別の要素がある場合は true を返します。

JniIdentityHashCode

相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。

(継承元 Object)
JniManagedPeerState

JSON (RFC 4627) でエンコードされた値をトークンのストリームとして読み取ります。

(継承元 JavaObject)
JniPeerMembers

JSON (RFC 4627) でエンコードされた値をトークンのストリームとして読み取ります。

Lenient

このパーサーが受け入れる内容が自由である場合は true を返します。 または、このパーサーが受け入れる内容を自由にするように構成します。

PeerReference

このJava ピアの JNI オブジェクト参照を取得します。

(継承元 Object)
ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)
ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 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()

次のトークン ( JsonToken#NAME property name) を返し、それを使用します。

NextNameAsync()

JSON (RFC 4627) でエンコードされた値をトークンのストリームとして読み取ります。

NextNull()

JSON ストリームから次のトークンを使用し、リテラル null であることをアサートします。

NextNullAsync()

JSON (RFC 4627) でエンコードされた値をトークンのストリームとして読み取ります。

NextString()

次のトークンの JsonToken#STRING string 値を返し、それを使用します。

NextStringAsync()

JSON (RFC 4627) でエンコードされた値をトークンのストリームとして読み取ります。

Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 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>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</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)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

JSON (RFC 4627) でエンコードされた値をトークンのストリームとして読み取ります。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象