2012-01-12 8 views
4

を使用して動的オブジェクトの直列化復元:JSONのは、私​​はタイプのJavaクラスを持っている想像してみましょうGson

String json = "{"par1":"val1","par2":{"subpar1":"subval1"}}"; 

Gson gson = new GsonBuilder.create(); 
MyClass mClass = gson.fromJson(json, MyClass.class); 

par2 JSONをいくつかから私に与えられている:

public class MyClass 
{ 
    public String par1; 
    public Object par2; 
} 

その後、私はこれを持っています他のアプリケーションと私はそれが動的なので、パラメータ名は何であるか分からない。

par2 MyClassの変数はJSON String変数がクラスオブジェクトに正しく非直列化されるように設定する必要がありますか?

おかげ

+0

あなたはGsonに縛られていますか?あなたのユースケースは、json-simple(http://code.google.com/p/json-simple)のような自由形式のJSONプロセッサではるかに優れています。 – Perception

答えて

6

はGSONユーザーガイドからSerializing and Deserializing Generic Typesをチェックアウト:

public class MyClass<T> 
{ 
    public String par1; 
    public T par2; 
} 

を、それをデシリアライズするには:

Type fooType = new TypeToken<Myclass<Foo>>() {}.getType(); 
gson.fromJson(json, fooType); 

・ホープこのヘルプ。

+0

私はこれがOPに役立つとは思わない。彼は、デシリアライズを実行する前にオブジェクトがどのタイプになるかを知らない。 – Perception

0

このSO質問にケビン・ドーランからの回答を参照してください:How can I convert JSON to a HashMap using Gson?

注意を、それが受け入れられた答えではありません、あなたはおそらくそれを少し変更する必要があります。しかし、それはかなり素晴らしいです。

また、トップレベルオブジェクトの型の安全性を捨て、ハッシュマップと配列をすべて使用するだけです。そのようにDolanのコードを変更する必要はありません。

-1

このコード: Gson gson = new GsonBuilder.create();

は次のようになります。

Gson gson=new Gson() 

(あなたはJSONドキュメントを解析している場合)、私は思います。

+5

あなたの提案は元のコードとまったく同じです。これは何もしません。 – dimo414

関連する問題