2017-06-15 8 views
-1

{ "TOTALRECORDCOUNT":588、 "のRecordCount":588、 "HASMORE":偽、 "レコードセット":{ "列":[ "PARTNERSEGMENTID"、 "ORGANIZATIONID"、 "ORGANIZATIONNAME" 、 "PROGRAMTRACK"、 "PARTNERLEVEL" ]、 "DATA":[ [ "Partner_Segment_GES"、 1、 "Relayware"、 "ProgramTrack_SolutionPartner"、 "AuthorizedLevel" ]、 [ "Partner_Segment_GES"、 2、 "タタ・コミュニケーションズ"、 "ProgramTrack_SolutionPartner"、 ヌル ]、以下のjsonデータをjacksonを使用してコレクションリストにデシリアライズする方法はありますか?

+0

。正しいjsonを入力してください。 –

+0

再生のためのタックス。 { "列":[ "CREATED" "MEMBERSHIPLEVEL"、 "PARTNERSEGMENTID"、 "ORGANIZATIONID"、 "ORGANIZATIONNAME"、 "PROGRAMTRACK"、 を ]、 「正しいJSONは{ "レコードセット" でありますDATA ":[ [ "ProgramLevel_Premier"、 "Partner_Segment_GES"、 2、 "タタ・コミュニケーションズ"、 "ProgramTrack_SolutionPartner"、 "2008-06-10T20:03:07Z" ] ] } } –

+0

以下に回答を掲載しました。将来的には、あなたが試した詳細とサンプルコードと、コードに入っている問題を追加してください。また、コメントに質問されたときに質問を修正してください。ハッピーラーニング!! –

答えて

0

あなたが投稿したJSONのみ1つのトップレベルを持っているとして、あなたはジャクソン@JsonRootNameアノテーションを使用することができますキー。それ以上あれば、レコードセットがそのフィールドであるpojoを作成することができます。「POJOレコードセット

@JsonRootName( "レコードセット") クラスレコード{

@JsonProperty(用:ここ コードである:JSONのみトップレベルの鍵としてレコードセットを有する

  1. ケースDATA ") リスト>データ;

    @JsonProperty("COLUMNS") 
    

    リストの列;

    //getter and setter 
    

    }

レコードセットオブジェクトにJSONをデシリアライズするためのコード

String jsonString="{ \"RECORDSET\": { \"COLUMNS\": [ \"MEMBERSHIPLEVEL\", \"PARTNERSEGMENTID\", \"ORGANIZATIONID\", \"ORGANIZATIONNAME\", \"PROGRAMTRACK\", \"CREATED\" ], \"DATA\": [ [ \"ProgramLevel_Premier\", \"Partner_Segment_GES\", 2, \"Tata Communications\", \"ProgramTrack_SolutionPartner\", \"2008-06-10T20:03:07Z\" ] ] } }"; 

     ObjectMapper mapper=new ObjectMapper(); 
     mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 

     RecordSet recordSet = mapper.readValue(jsonString, RecordSet.class); 

     //The below two statements can be replaced with the logic that you want to operate on deserialized object 
     System.out.println(recordSet.getColumns()); 
     System.out.println(recordSet.getData()); 
  • totalRecordSetCount及び他のフィールドはトップレベルの一部であるケースjson:

    クラスレスポンス{(HASMORE) プライベートboolean hasMore;

    @JsonProperty( "RECORDCOUNT") private int recordCount;

    @JsonProperty( "TOTALRECORDCOUNT") private int totalRecordCount;

    @JsonProperty("RECORDSET") 
    

    RecordSet recordSet;

    // getterとsetter }

  • デシリアライズするケース#1

    コードからレコードセットPOJOを取る:あなたが投稿したJSONは有効なものではありません

    ObjectMapper mapper=new ObjectMapper(); 
          Response response = mapper.readValue(jsonString, Response.class); 
    
          RecordSet recordSet = response.getRecordSet(); 
    
    
    //The below two statements can be replaced with the logic that you want to operate on deserialized object 
    
          System.out.println(recordSet.getColumns()); 
          System.out.println(recordSet.getData()); 
    
    +0

    もう一度、ソリューションをお寄せいただきありがとうございます。json DATAの「[Partner_Segment_GES」、1、 、null]]にはファイル名がありません。配列array.iとして取得するのではなく、各配列を直接オブジェクトにマップしたいのですが、配列をすべてリストし、オブジェクトを再作成する必要はありません。以下のようなクラスデータ{プライベートString segemt、プライベートStringトラック、プライベートString id} –

    +0

    標準のjsonオブジェクトのマッピングによれば、あなたはそれを行うことはできませんが、ループごとに手動でフィールドを繰り返し処理することができます。リスト内のデータの順序に頼ってオブジェクト変数を設定するのは良い考えではないので、そうしないでください。 "DATA"内のjsonの構造について、文字列のリストではなく、地図のリスト。マップ内にオブジェクト変数としてのキーと現在の値としての値を持つことができます。 –

    関連する問題