Mule JSON数据到对象

时间:2013-06-20 12:43:23

标签: java json jackson mule

我有一个json对象

data = { 
'ad': {
    "date":"2013-06-05",
    "catagory":"6",
    "subcatagory":"5",
    "text":"John john",
    "ssn":"1306743999",
    "email":"jonbrynjar@365.is",
    "phone":"8612001"
},
'cc-info': {
    "amount": "70",
    "cardNumber": "4222222222222",
    "expiryDate": "1215",
    "currency": "ISK"
},
'dates': [
    { 'date': '2013-06-18', 'media': 1 },
    { 'date': '2013-06-19', 'media': 3 }
]
}

然后我有一个子流,它接受该json对象的“cc-info”部分并使用该数据来调用第三方服务。 要提取json对象的“cc-info”部分,我使用@JsonAutoDetect类

@JsonAutoDetect
public class Handpoint {

private String amount;
private String cardNumber;
private String expiryDate;
private String currency;

public String getAmount() { return this.amount; }
public void setAmount(String amount) { this.amount = amount; }

public String getCardNumber() { return this.cardNumber; }
public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }

public String getExpiryDate() { return this.expiryDate; }
public void setExpiryDate(String expireDate) { this.expiryDate = expireDate; }

public String getCurrency() { return this.currency; }
public void setCurrency(String currency) { this.currency = currency; }
}

当我发送整个json对象时,我收到一个错误。 问题是:我是否必须将json对象中的每个变量都放入我的@JsonAutoDetect类中? 或者最佳做法是什么。 我已经验证了我的代码在我发送json objcet的“cc-info”部分时有效。

2 个答案:

答案 0 :(得分:0)

有一种更简单的方法可以将JSON元素转换为一系列对象。您是否尝试过Google GSon 库?有一个样本:  import com.google.gson.Gson;

         Gson gson = new Gson();
         Handpoint testing = gson.fromJson(data, Handpoint.class);

         System.out.println("Amount: " + testing.getAmount());

另一方面,如果你想反序列化包含数组的日期,你最好看看这里: Gson Array deserialization

答案 1 :(得分:0)

您不需要@JsonAutoDetect,它与没有参数的默认值没有任何不同。

但如果您的问题是您是否可以忽略未知属性,那么答案是肯定的。 Here有两种方式。

例如:

mapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);

会做到这一点。