0

私の Json 文字列は、次の 2 つの形式のいずれかである可能性があります。JsonArray か JsonObject かがわからないため、どのように解析すればよいでしょうか。

{"a":{"a":"a","a":"a","a":"a","a":"a"}}

{"a":[{"a":"a","b":"a","a":"a","a":"a"},{"b":"b","b":"b","b":"b","b":"b"}]}

ありがとう。

4

3 に答える 3

0

トークン ストリームの解析のアイデアを提供するサンプル コード

これは初期トークンで呼び出され、

nextToken(t) は、ストリームから次のトークンを取得します。

parseJsonElement は、ツリーの性質を処理するために再帰的です。

public Object parseJsonElement(Token t){
    if (t.isArrayStart()){
       // is an array so create list and put child elements into list
        List list = new List();
        t = nextToken(t);
        while (!t.isArrayEnd()){
           list.add(parseJsonElement(t));
        }
        return list;
    }else if (t.isObjectStart()){
       // is an object so return parsed object
        return parseJsonElement(t);
    }else // handle something else
}
于 2013-06-12T00:09:12.543 に答える
0

Gsonを使用して JSON を解析していると仮定して、JsonParserを作成します。そのparseメソッドの戻り値の型はJsonElementです。クラスのメソッド リストを読むとわかるように、オブジェクト、配列、その他のいずれであるかを示すメソッドがあります。その後、オブジェクトを適切なサブクラス ( JsonObjectJsonArrayなど) にケース化するか、提供された便利なメソッドを使用してそれを行うことができます。

そこから、オブジェクトまたは配列を調べて、プロパティ、要素、プリミティブ値などを取得できます。これらも JsonElement として出力されます。

于 2013-06-12T00:16:52.110 に答える
0

JSONLib または Gson を使用している場合、両方のライブラリに JsonElement という抽象クラスがあります。そのクラスには、JsonObject または JsonArray (#isJsonArray() #isJsonObject() メソッド) である場合に応答する機能があります。すると、ちゃんとキャストできます。

于 2013-06-12T00:19:59.863 に答える