6

私はこれを理解しようとしてGoogleを探し回っていますが、それができないようです. 対話する必要がある別のソースから Java アプレットに返される次の json 文字列があります。

{
 "A01": {"Status": "Ready", "Time": "00:00"}, 
 "A02": {"Status": "Ready", "Time": "00:00"}, 
 ......
}

現時点では、Gson を使用してアプレットに解析する方法がわかりません。そのプログラムのデザイナーと話をしたとき。json 文字列は、java ではなく php で使用するように設計されているため、php でデコードすると、適切な多次元連想配列が得られました。

これに関する提案。

4

3 に答える 3

7

PHP の連想配列はMap、Java の に変換されます。したがって、Gson の目には、JSON はMap<String, Event>Eventクラスにフィールドstatustime.

public class Event {
    private String Status;
    private String Time;

    // Add/generate getters, setters and other boilerplate.
}

はい、大文字のフィールド名は醜いですが、それが JSON の外観です。それ以外の場合は、カスタム Gson デシリアライザーを作成する必要があります。

変換する方法は次のとおりです。

Map<String, Event> events = new Gson().fromJson(json, new TypeToken<Map<String, Event>>(){}.getType());

A01A02などがMapキーになり、その値が のEvent値になりますMapTimeを に取得するために、別のカスタム デシリアライザーを追加することもできますjava.util.Date

別の代替手段として、代わりに使用することもできますMap<String, Map<String, String>>

于 2010-11-23T14:07:39.063 に答える
2

そのリンクは、私が見ていなかった何かを私に指摘しました。また、投稿で、A01、A02 などを知ることが非常に重要であることを忘れていました。しかし、あなたが私に指摘した投稿のリンクは、私にとってうまくいくこれを思いつくように導きます.

JsonParser parse = new JsonParser();
JsonObject jobj = (JsonObject)parse.parse(status);                            
Set<Map.Entry<String, JsonElement>> map = jobj.entrySet();
Iterator<Map.Entry<String, JsonElement>> iterator = map.iterator();
int size = map.size();
for( int k = 0; k < size; k++ )
{
    Map.Entry<String, JsonElement> entry = iterator.next();
    String key = entry .getKey();
    JsonObject jele = (JsonObject)entry.getValue();
}
于 2010-11-23T14:15:54.190 に答える
1

以下のように、jsonがわずかに異なる場合:

{
 [
  {"Status": "Ready", "Time": "00:00"}, 
  {"Status": "Ready", "Time": "00:00"}, 
  ......
 ]
}

Gsonは、jsonをオブジェクトのコレクションに変換できます。オブジェクトは自分で定義する必要があります。したがって、次のものが必要になります。

public class myAClass {
public String Status;
public Double time; //this could be a string/or even a Date I guess, 
                    //not sure what data you are expecting
                    //and the colon may cause a problem if parsed as a double
}

そして、それを次のように使用します。

Type listType = new TypeToken<List<myAClass>>() {}.getType();
List<myAClass> myAClassList = new Gson().fromJson(json, listType); 
//where json is yr json string

その後、必要に応じてオブジェクトのリストを使用できます。

(ここでさらに読む)

于 2010-11-23T13:44:18.790 に答える