2017-02-27 9 views
-1

私はそのタイプの3つのインスタンスを期待するこのキーベースのタイプのプロパティを使用してJSONタイプを逆シリアル化する方法

public class Parameter { 

    String name; 

    String type; 
} 

のような単純なPOJOのjava.util.Listにこの

"parameters": { 
      "bodyParameter": { 
       "type": "String" 
      }, 
      "otherParam": { 
       "type": "String" 
      }, 
      "uuid": { 
       "type": "String" 
      } 
     } 

のように見えるJSONをデシリアライズするためにジャクソンマッパーを使用したいですパラメータには、まずname = "bodyParameter"とtype = "String"などが含まれます。

答えて

1

これにはjacksonJsonライブラリを使用できます。

のMaven:

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.8.5</version> 
</dependency> 

擬似コード:

ObjectMapper mapper = new ObjectMapper(); 
Map<String, Object> dataMap = mapper.readValue(json, Map.class); 

データマップがキーと値のペアを持つことになります。私はジャクソンのカスタムサポートを得なければならなかった

+0

ありがとうございますが、依然としてカスタムのシリアライザ/デシリアライザの作業全体を行う必要がありました。 – Filip

0

シリアライズ/デシリアライゼーションの面で、この作業を持っているためにのentrySetを反復処理し、あなたのPOJOに値を割り当てる

@JsonDeserialize(using = ParametersDeserializer.class) 
@JsonSerialize(using = ParametersSerializer.class) 
private List<Parameter> parameter; 

カスタムデシリアライザだろう基本的にループJSON「パラメータ」ノードのフィールドとカスタム・シリアライザは、パラメータのリストを通って、それぞれに対して他方のループに、それは最初のパラメータの名前とティを使用してフィールドを作成しますでしょう

JsonNode node = jsonParser.readValueAsTree(); 
List<Parameter> items = new ArrayList<>(); 

Iterator<String> it = node.fieldNames(); 
while(it.hasNext()) { 
    String nextField = it.next(); 
    JsonNode n = node.get(nextField); 
    JsonNode type = n.get("type"); 
    Parameter p = new Parameter(); 
    p.setName(nextField); 
    p.setType(type.asText()); 
    items.add(p); 
} 

return items; 

パラメータのリストを返しますフィールドには、1つのフィールド、つまりタイプ、パラメータのタイプを使用するオブジェクトが含まれます。

jsonGenerator.writeStartObject();//com.fasterxml.jackson.core.JsonGenerator 
for (Parameter p : parameters) { 
    jsonGenerator.writeFieldName(p.getName()); 
    jsonGenerator.writeStartObject(); 
    jsonGenerator.writeStringField("type", p.getType()); 
    jsonGenerator.writeEndObject(); 
} 
jsonGenerator.writeEndObject(); 
関連する問題