JsonReader クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 オブジェクト内では、名前と値のペアは 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) |
から |
プロパティ
Class |
この |
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 リーダーと基になる |
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() |
このオブジェクトのモニターで待機している 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) でエンコードされた値をトークンのストリームとして読み取ります。 |