2017-07-03 9 views
1

jsonのコンテンツを私のサーバ(C++)に送るJavaアプリケーションがあります。私は私のサーバーjsonを受け取り、解析、検証などを行い、jsonとの応答も返す。 は、私は、このJSON本体(例)を持っている私のjavaアプリ内の1つの要求を持っている: GSON deserialize/serialize hierarchyクラス

{ 
    "a": "a", 
    "b": "b", 
    "searchMethod": { 
     "searchByUser": { 
      "userId": "userId" 
     } 
    } 
} 

しかし、同じコマンドのために私が持つことができる

searchMethod:だから

{ 
    "a": "a", 
    "b": "b", 
    "searchMethod": { 
     "searchByEmail": { 
      "email": "[email protected]" 
     } 
    } 
} 

、ユーザーが行いますこの2つの異なるjson bodysのうちの1つを私のサーバに送ることができるように要求する。私たちは何をsearchMethod送信するのかわからない。この部分(ユーザーが送信するsearchMethodなどを調べる)では、jsonを受け取ったときにC++サーバーで行います。だから私のJavaアプリケーションでは、彼らのコンテンツとsearchMethodオブジェクトを送信するためにgsonを使用する必要があります。

この私のクラスでは、要求を行うには:

public class RequestExample implements SerializableJSON 
{ 
    public String a; 
    public String b; 

    public RequestExample(String a, b) 
    { 
     this.a = a; 
     this.b = b; 
    } 

    public static RequestExample fromStringJson(String data) 
    { 
     try 
     { 
      Gson gson = new Gson(); 
      return gson.fromJson(data, RequestExample.class); 
     } 
     catch(Exception e) 
     { 
      return null; 
     } 
    } 

    public static RequestExample fromBytesJson(byte[] data) 
    { 
     if (data == null) return null; 
     try 
     { 
      String str = new String(data, "utf-8"); 
      return fromStringJson(str); 
     } 
     catch (Exception e) 
     { 
      return null; 
     } 
    } 

    @Override 
    public String toJsonString() 
    { 
     try 
     { 
      Gson gson = new Gson(); 
      return gson.toJson(this); 
     } 
     catch(Exception e) 
     { 
      return null; 
     } 
    } 

    @Override 
    public byte[] toJsonBytes() 
    { 
     try 
     { 
      return this.toJsonString().getBytes("utf-8"); 
     } 
     catch (Exception e) 
     { 
      return null; 
     } 
    } 
} 

は、私はすでに、この要求でab、その常に同じフィールドを実装します。このクラスでは、fromStringJson(String data)は、ユーザーが送信しようとするすべてのjsonを含むデータ文字列フィールドを受け取ります。この関数では、私はこの文字列を私のRequestExampleクラスのjsonオブジェクト型に変換するためにgson.fromJsonを使用します。

したがって、主な質問は、RequestExampleクラスを使用して、searchMethodの種類に関係なく、文字列をjsonオブジェクトに変換する方法です。私は私のJavaアプリケーションで言ったように私はどのようにユーザが選択するseachMethodを知る必要はありません。はい、私のサーバーでは、この部分はすでに実装されています。今のところ、私は自分のサーバーにリクエストを送信するだけです。

答えて

1

あなたがフィールドsearchMethodを使用しない場合は、返信用Map

private Map<String, Object> searchMethod = new HashMap<>(); 

or 

private Map<String, Map<String,Object>> searchMethod = new HashMap<>(); 

or 

private Map<String, Map<String,String>> searchMethod = new HashMap<>(); 
+0

おかげのようにそれを実装することができます。私はあなたのコードを理解していますが、疑問が1つあります。オブジェクトは何ですか? searchByUserまたはsearchByEmail?このマップでは、私はいくつかのオブジェクトを定義する必要がありますが、私はオブジェクトのタイプを知っていないユーザーが選択します。あなたは疑いを理解していますか?同じコマンドは、searchByUserまたはsearchByEmailを持つことができます。私は自分の文字列データを受け取ったとき、私はユーザーが入れたsearchMethodを知らないのです – RMRMaster

+0

申し訳ありません。私はユーザJavaの検索を必要としない。私はこのようなマップしか使用できません: Map > searchMethod、私のサーバーで行うjsonコンテンツに関する評価。この方法で私はsearchMethodと内部のC++サーバーを送信することができますjsonを解析して検証を行います:) – RMRMaster

+0

私が理解したように、あなたは解決策を見つけましたので、他の人の回答を編集しました –