2

私は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」部分を送信するだけでコードが機能することを確認しました。

4

2 に答える 2

1

それは必要あり@JsonAutoDetectません。引数なしのデフォルトと何も変わらないのです。

しかし、不明なプロパティを無視できるかどうかという質問であれば、答えはイエスです。ここにいくつかの方法があります。

例えば:

mapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);

トリックを行うでしょう。

于 2013-06-27T22:53:07.687 に答える
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 配列の逆シリアル化

于 2013-06-21T14:12:20.217 に答える