2017-02-22 12 views
0

json要素の値のソート順でMapからJSON文字列を生成しようとしています。ここに私のJSONJsonから生成されたJsonは、Json要素の値のソート順である必要があります。

"customer": { 
     "id": "168252733", 
     "firstName": "OTP", 
     "lastName": "KPI", 
     "contact": { 
     "emailAddress": "[email protected]", 
     "phone": [ 
      { 
      "number": "2567775065", 
      "type": "primary" 
      }, 
      { 
      "number": "2567775065", 
      "type": "secondary" 
      } 
     ] 
     } 
    } 

このJSON缶は、複数の顧客レコードが含まれているが、私は、JSONはFIRSTNAME、姓または電子メールがユーザーの好みに応じてどちらかのソート順にする必要があります生成することにしたいです。

私はJACKSONの新機能ですが、実装方法はわかりません。誰でもこのことを教えてくれますか? ありがとうございました。

+1

最も簡単な方法は、リストまたは配列をシリアル化する前に並べ替えることです。 –

+0

返事をありがとうジョー。しかし、私はリストを並べ替えることは望まない。とにかくジャクソンはそれをすることはできません。 –

+0

シリアライズ中に[顧客シリアライザ](http://wiki.fasterxml.com/JacksonHowToCustomSerializers)を使用してリストをコピーして並べ替えることができると思います。このトリックは、シリアライザ内のユーザー設定にアクセスしようとしています。 –

答えて

1

オプション1:

簡単な方法は、シリアル化の前に、ユーザの嗜好に基づいた顧客のリストをソートするArrays.sort(T[] a, Comparator<? super T> c)を使用するようになります。あなたはJSONからお客様のソートされたリストを望むなら、あなたはカスタムデシリアライザを登録し、あなたのCustomerListDeserializerがソートされたリストを生成する必要が

:あなたは、各ユーザの嗜好のためのコンパレータを作成し、Arrays.sort(customerList, firstNameComparator)

オプション2を使用する必要が

お客様の

SimpleModule simpleModule = new SimpleModule().addDeserializer(CustomerList.class, new CustomerListDeserializer()); 
     mapper.registerModule(smipleModule); 

オプション3:

Fiの最初に顧客オブジェクトのリストにデシリアライズし、並べ替えを適用します。

関連する問題