2017-07-28 7 views
0

はこのようにJSON文字列を構築しています:あなたは(かなり印刷で)それを印刷するときジャクソンを使用してマーシャリングの有無に関わらずカスタムJSONを構築できますか?

public String buildAutoCompleteQuery(int from, int pageSize, String criteria) { 
    StringBuilder autoComplete = new StringBuilder(); 
    autoComplete.append("{").append("\"from\"").append(":").append(from).append(",").append("\"size\"").append(":").append(pageSize).append(",").append("\"query\"").append(":").append("{").append("\"match\"").append(":").append("{") 
      .append("\"full_text\"").append(":").append("\"").append(criteria).append("\"").append("}").append("}}"); 
    return autoComplete.toString(); 
} 

サンプルパラメータに入れた後、それは次のようになります。

{ 
    "from": 1, 
    "size": 15, 
    "query": { 
     "match": { 
      "full_text": "Hello" 
     } 
    } 
} 

はにもっと簡単な方法がありますJackson(マーシャリング/データバインディングの有無にかかわらず)を使用してこのJSONオブジェクトを作成しますか?

答えて

0

オブジェクトのクラスを作成してから、Jacksonを使用してオブジェクトを文字列に変換することができます。

{ 
"from": 1, 
"size": 15, 
"query": { 
    "match": { 
     "full_text": "Hello" 
    } 
    } 
} 

今すぐオートコンプリートオブジェクトを変換するためにジャクソンを使用すると

public class AutoComplete{ 
    private Integer from; 
    private Integer size; 
    private Query query; 
    // getters and setters 
} 

public class Query{ 
    private Match match; 
} 

public class Match{ 
    private String full_text; 
} 

のように、このためのクラスを作成し、必要なJSON文字列を取得します。

+0

マーシャリングなしでそれを行う方法はありますか?私が尋ねる理由は、マッチクエリが常に異なるため、JSON文字列としてハードコードする必要があるからです。 –

+0

あなたの要望を詳しく教えてください –

+0

これは本当にRestClientを使用してElasticsearch Queriesをハードコードしています...提供しているAPIを使用していないため、低レベルのRestClientを使用しているため一致するコンテンツがすべて異なります。一部の照会には一致サブセクションがまったくない場合もあります。 –

0

私はこれらの目的のためにJacksonのObjectMapperを使用します。エコシステムを記述する一連のオブジェクトを作成することができます(前のコメントと同様)。

(方向オブジェクト - > JSON)は、オブジェクトを持っているとあなたがのJSON文字列を持っている場合はJSON文字列がObjectMapper#writeValueAsString(Object値)

(ディレクションjson->オブジェクト)を使用取得したい場合おそらくjsonファイルで、オブジェクトを取得するにはObjectMapper#readValue(String content、Class valueType)などを使用します。 良い例を確認in here

私は個人的にObjectMapperを見つけるのが非常に便利です。ヌル値を無視するように設定することも、シリアル化されたクラスのプライベートメンバーを言うこともできます。

関連する問題