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

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

次に、JSON テキスト内の構造体ごとにハンドラー メソッドを作成します。 各オブジェクト型と配列型ごとに メソッドが必要です。 <ul><li>厳密な>配列処理</強力な>メソッド内で<、最初に を呼び出#beginArrayして配列の開始角かっこを使用します。 次に、値を累積する while ループを作成し、 が false の場合 #hasNext に終了します。 最後に、 を呼び出 #endArrayして、配列の終わり角かっこを読み取る。 <li>厳密な>オブジェクト処理</強力な>メソッド内で<、最初に を呼び出#beginObjectしてオブジェクトの開始中かっこを使用します。 次に、名前に基づいてローカル変数に値を割り当てる while ループを作成します。 が false の場合、 #hasNext このループは終了する必要があります。 最後に、 を呼び出 #endObjectして、オブジェクトの右中かっこを読み取ります。 </ul>

入れ子になったオブジェクトまたは配列が見つかったら、対応するハンドラー メソッドにデリゲートします。

不明な名前が見つかった場合、厳密なパーサーは例外で失敗します。 Lenient パーサーは を呼び出 #skipValue() して値の入れ子になったトークンを再帰的にスキップする必要があります。そうしないと競合する可能性があります。

値が null の場合は、最初に を使用して#peek()チェックする必要があります。 null リテラルは、 または #skipValue()のいずれかを#nextNull()使用して使用できます。

<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> このリーダーでは、数値を文字列として読み取り、文字列値を数値として読み取ることができます。 たとえば、JSON 配列[1, "1"]の両方の要素が または #nextString#nextInt使用して読み取られる場合があります。 この動作は、損失のある数値変換を防ぐことを目的としています。double は JavaScript の唯一の数値型であり、 のような 9007199254740993 非常に大きな値は、そのプラットフォームで正確に表すことはできません。 精度の低下を最小限に抑えるには、非常に大きな値を書き込み、JSON で文字列として読み取る必要があります。

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

の Java ドキュメント android.util.JsonReader

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

コンストラクター

JsonReader(Reader)

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

プロパティ

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 は 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を閉じます。

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

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

(継承元 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>割り込み</em によって待機します>。

(継承元 Object)
Wait(Int64)

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

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

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< 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) でエンコードされた値をトークンのストリームとして読み取ります。

適用対象