2017-01-25 8 views
4

以下は、iOS(Swift)アプリケーションとAndroid(Java)アプリケーションで使用するJSON本体です。スウィフトはJavaでJSONオブジェクトを作成する方法

{ 
    "type" : "select", 
    "args" : { 
     "table" : "todo", 
     "columns": ["id", "title","completed"], 
     "where" : {"user_id": 1} 
    } 
} 

、それはかなり簡単で辞書に上記を変換するのは簡単です:Javaでは

let params: [String: Any] = [ 
    "type" : "select", 
    "args" : [ 
    "table"  : "todo", 
    "columns" : ["id","title","completed"], 
    "where"  : ["user_id" : 1] 
    ] 
] 

、私は上記を行うためにGSONを使用していますが、私は私の解決策であることを感じて醜いと

public class SelectQuery { 

    @SerializedName("type") 
    String type = "select"; 

    @SerializedName("args") 
    Args args; 

    public SelectTodoQuery(=) { 
     args = new Args(); 
     args.where = new Where(); 
     args.where.userId = 1; 
    } 

    class Args { 

     @SerializedName("table") 
     String table = "todo"; 

     @SerializedName("columns") 
     String[] columns = { 
       "id","title","completed" 
     }; 

     @SerializedName("where") 
     Where where; 

    } 

    class Where { 
     @SerializedName("user_id") 
     Integer userId; 
    } 

} 

あまりにも長い間、Javaでこれを行うにしても、どのように1はGSONを使用せずに、ネイティブJavaでこのJSONを表す取り掛かるます良い方法はありますか?

UPDATE

私は私が上記の操作を行うに役立つライブラリのリストを求めていないです、私はすでにそれを知っているとはっきりものを使用しています。私はそのパフォーマンスについて知る必要はありません。 私はより良い実装(存在する場合)を求めています。Javaがそのような機能を提供していない場合は、それも受け入れられる回答かもしれません。 また、Javaでネイティブに同じことを行う例です。

+0

あなたは組み込みの 'JSONObject'と' JSONArray'クラスを使用することができますが、エラー処理も同様に管理する必要があります。 gsonのようなシリアライゼーションライブラリを使うとはるかに便利です – akash93

+0

こんにちはAkash、まさに!これをJavaでよりうまくやる方法は他にありませんか? –

答えて

1

まあ、jsonとの間でオブジェクトのシリアライズとデシリアライズを行うライブラリがいくつかあります。

GSONは、POJO(古いJavaオブジェクトを予定しています)をJSONにアノテーションを付けずに変換することができます。

LoganSquareは、この目的のための最適なライブラリです。フィールドに注釈を付ける必要がありますが、パフォーマンスはかなり高いです。

Githubのページでは、LoganSquareと他のオプションのベンチマーク研究について実際に説明しています。

enter image description here

ありMoshiJacksonのようないくつかの他の人がいるが、私が見つけたLoganSquare最高のプラットフォームの限界を考慮。

限りネイティブの機能に関しては、Javaは、これまで にそのようなユーティリティを提供していないと、誰かがThird partylibsに興味を持っていない場合、私は上記したプロジェクトは、すべてのオープンソースのオブジェクトである、 1はそれらをforkすることができます自分のバージョンを自分の の用途に基づいて実装します。 Gsonで

+0

質問の更新情報をお読みください。 –

+0

更新された回答。 –

0

あなたはこのような何かを試すことができ、私はあなたがここに読みたいタイプについて確認していない:

final GsonBuilder builder = new GsonBuilder(); 
final Gson gson = builder.enableComplexMapKeySerialization().create(); 
final Type type = new TypeToken<Map<String, Args>>(){}.getType(); 

// deserialize from a string (read your file to string maybe) 
HashMap<String, Args> aMap = gson.fromJson(aJSONString, type); 
関連する問題