Json Object Mapper читать карту - PullRequest
0 голосов
/ 04 мая 2018

У меня есть строка JSON, которую я преобразую в объект данных, используя mapper.readValue()

Я преобразую строку JSON:

[  
  {  
    "id":79107417,
    "email":"xxx@gmail.com",
    "optInType":"Single",
    "emailType":"Html",
    "dataFields":[  
      {  
        "key":"ABV",
        "value":0.0000000000
      },
      {  
        "key":"ACCOUNTNUMBER",
        "value":null
      },
      {  
        "key":"ACELLARING",
        "value":null
      },
      {  
        "key":"ACOLREDWINE",
        "value":null
      },
      {  
        "key":"ACOLWHITEWINE",
        "value":null
      },
      {  
        "key":"ADRINKING",
        "value":null
      },
      {  
        "key":"AENPRIMEUR",
        "value":null
      },
      {  
        "key":"AGIFTS",
        "value":null
      },
      {  
        "key":"AHASIBSTORAGE",
        "value":null
      },
      {  
        "key":"AINTERESTEDINRESALE",
        "value":null
      },
      {  
        "key":"AM_FROM_NAME",
        "value":"FINE+RARE"
      },
      {  
        "key":"AM_NAME",
        "value":"FINE+RARE"
      },
      {  
        "key":"AOV",
        "value":null
      },
      {  
        "key":"AREGBORDEAUX",
        "value":null
      },
      {  
        "key":"AREGCHAMPAGNE",
        "value":null
      },
      {  
        "key":"AREGFORTIFIEDS",
        "value":null
      },
      {  
        "key":"AREGITALY",
        "value":null
      },
      {  
        "key":"AREGNEWWORLD",
        "value":null
      },
      {  
        "key":"AREGREDBURGUNDY",
        "value":null
      },
      {  
        "key":"AREGRHONE",
        "value":null
      },
      {  
        "key":"AREGSPAIN",
        "value":null
      },
      {  
        "key":"AREGSPIRITS",
        "value":null
      },
      {  
        "key":"AREGUSA",
        "value":null
      },
      {  
        "key":"AREGWHITEBURGUNDY",
        "value":null
      },
      {  
        "key":"AROSE",
        "value":null
      },
      {  
        "key":"BLOCKBUSTER",
        "value":null
      },
      {  
        "key":"COMPANYNAME",
        "value":null
      },
      {  
        "key":"CONTACTNUMBER",
        "value":7740008599.0000000000
      },
      {  
        "key":"COUNTRY",
        "value":"France"
      },
      {  
        "key":"COUNTRYCODE",
        "value":"44"
      },
      {  
        "key":"DELIVERY-DATE",
        "value":null
      },
      {  
        "key":"DELIVERY-TIME",
        "value":null
      },
      {  
        "key":"DIRECT-SIGN-UP",
        "value":null
      },
      {  
        "key":"FIRSTNAME",
        "value":"Chloe"
      },
      {  
        "key":"FULLNAME",
        "value":""
      },
      {  
        "key":"GENDER",
        "value":null
      },
      {  
        "key":"LASTNAME",
        "value":"Ashton"
      },
      {  
        "key":"LASTSIDATE",
        "value":null
      },
      {  
        "key":"LASTSUBSCRIBED",
        "value":"2017-11-16T08:47:45"
      },
      {  
        "key":"M-B-REGION-VOL-NAME",
        "value":null
      },
      {  
        "key":"M-B-VINT-VOLUME-NAME",
        "value":null
      },
      {  
        "key":"M-B-WINE-VOLUME-NAME",
        "value":null
      },
      {  
        "key":"MOST-ACTIVE-MONTH",
        "value":null
      },
      {  
        "key":"NOTBLOCKBUSTER",
        "value":null
      },
      {  
        "key":"POSTCODE",
        "value":null
      },
      {  
        "key":"PRIVACYAGREEMENT",
        "value":true
      },
      {  
        "key":"REFERREDBY",
        "value":null
      },
      {  
        "key":"SALESORDERS",
        "value":null
      },
      {  
        "key":"STORAGE-NUMBER",
        "value":null
      },
      {  
        "key":"TITLE",
        "value":null
      },
      {  
        "key":"VINATONDONIABOUGHT",
        "value":null
      },
      {  
        "key":"WINE-NAME",
        "value":null
      }
    ],
    "status":"Subscribed"
  }
]

А вот и мой код:

String jsin = "{\"dotMailerContact\":" + result.toString() + "}";
JSONObject jo = new JSONObject(jsin);
ObjectMapper mapper = new ObjectMapper();
StringReader reader = new StringReader(jo.toString()); // Json
// LASTSUBSCRIBED
MainDotMailerResponse moduleDto = mapper.readValue(reader, MainDotMailerResponse.class);
for (DotMailerContact dot: moduleDto.getDotMailerContact()) {
 ArrayList < LinkedHashMap < String, String >> dataFields = dot.getDataFields();
 for (Map < String, String > map: dataFields) {

  for (String key: map.keySet()) {
   System.out.println("key: " + key + " value " + String.valueOf(map.get(key)));
  }
 }
}

Преобразование атрибутов, таких как id, email и т. Д., Работает, но записи массива dataFields преобразуются неправильно (значение, ключ):

[{value=0.0, key=ABV}, {value=null, key=ACCOUNTNUMBER}, {value=null, key=ACELLARING}, {value=null, key=ACOLREDWINE}, {value=null, key=ACOLWHITEWINE}, {value=null, key=ADRINKING}, {value=null, key=AENPRIMEUR}, {value=null, key=AGIFTS}, {value=null, key=AHASIBSTORAGE}, {value=null, key=AINTERESTEDINRESALE}, {value=FINE+RARE, key=AM_FROM_NAME}, {value=FINE+RARE, key=AM_NAME}, {value=null, key=AOV}, {value=null, key=AREGBORDEAUX}, {value=null, key=AREGCHAMPAGNE}, {value=null, key=AREGFORTIFIEDS}, {value=null, key=AREGITALY}, {value=null, key=AREGNEWWORLD}, {value=null, key=AREGREDBURGUNDY}, {value=null, key=AREGRHONE}, {value=null, key=AREGSPAIN}, {value=null, key=AREGSPIRITS}, {value=null, key=AREGUSA}, {value=null, key=AREGWHITEBURGUNDY}, {value=null, key=AROSE}, {value=null, key=BLOCKBUSTER}, {value=null, key=COMPANYNAME}, {value=7.740008599E9, key=CONTACTNUMBER}, {value=France, key=COUNTRY}, {value=44, key=COUNTRYCODE}, {value=null, key=DELIVERY-DATE}, {value=null, key=DELIVERY-TIME}, {value=null, key=DIRECT-SIGN-UP}, {value=Chloe, key=FIRSTNAME}, {value=, key=FULLNAME}, {value=null, key=GENDER}, {value=Ashton, key=LASTNAME}, {value=null, key=LASTSIDATE}, {value=2017-11-16T08:47:45, key=LASTSUBSCRIBED}, {value=null, key=M-B-REGION-VOL-NAME}, {value=null, key=M-B-VINT-VOLUME-NAME}, {value=null, key=M-B-WINE-VOLUME-NAME}, {value=null, key=MOST-ACTIVE-MONTH}, {value=null, key=NOTBLOCKBUSTER}, {value=null, key=POSTCODE}, {value=true, key=PRIVACYAGREEMENT}, {value=null, key=REFERREDBY}, {value=null, key=SALESORDERS}, {value=null, key=STORAGE-NUMBER}, {value=null, key=TITLE}, {value=null, key=VINATONDONIABOUGHT}, {value=null, key=WINE-NAME}]

Не могли бы вы помочь, что я здесь не так делаю?

Пожалуйста, смотрите ниже основной класс MainDotMailerResponse

    package uk.co.frw.test.DTO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonPropertyOrder(
{"dotMailerResponse", "dotMailerContact"})
public class MainDotMailerResponse
{

    @JsonProperty("dotMailerContact")
    @JsonIgnore
    private List<DotMailerContact> dotMailerContact = new ArrayList<DotMailerContact>();

    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    public List<DotMailerContact> getDotMailerContact()
    {
        return dotMailerContact;
    }

    public void setDotMailerContact(List<DotMailerContact> dotMailerContact)
    {
        this.dotMailerContact = dotMailerContact;
    }

}

Пожалуйста, смотрите подкласс

 package uk.co.frw.test.DTO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder(
{"id", "email", "optInType", "emailType", "dataFields", "status"})
public class DotMailerContact
{

    @JsonProperty("id")
    private Integer id;
    @JsonProperty("email")
    private String email;
    @JsonProperty("optInType")
    private String optInType;
    @JsonProperty("emailType")
    private String emailType;
    @JsonProperty("dataFields")
    private ArrayList<LinkedHashMap<String, String>> dataFields;
    @JsonProperty("status")
    private String status;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    @JsonProperty("id")
    public Integer getId()
    {
        return id;
    }

    @JsonProperty("id")
    public void setId(Integer id)
    {
        this.id = id;
    }

    @JsonProperty("email")
    public String getEmail()
    {
        return email;
    }

    @JsonProperty("email")
    public void setEmail(String email)
    {
        this.email = email;
    }

    @JsonProperty("optInType")
    public String getOptInType()
    {
        return optInType;
    }

    @JsonProperty("optInType")
    public void setOptInType(String optInType)
    {
        this.optInType = optInType;
    }

    @JsonProperty("emailType")
    public String getEmailType()
    {
        return emailType;
    }

    @JsonProperty("emailType")
    public void setEmailType(String emailType)
    {
        this.emailType = emailType;
    }

    @JsonProperty("dataFields")
    public ArrayList<LinkedHashMap<String, String>> getDataFields()
    {
        return dataFields;
    }

    @JsonProperty("dataFields")
    public void setDataFields(ArrayList<LinkedHashMap<String, String>> dataFields)
    {
        this.dataFields = dataFields;
    }

    @JsonProperty("status")
    public String getStatus()
    {
        return status;
    }

    @JsonProperty("status")
    public void setStatus(String status)
    {
        this.status = status;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties()
    {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value)
    {
        this.additionalProperties.put(name, value);
    }

}
...