首页 > 解决方案 > 如何从 JSON 对象中获取特定变量?

问题描述

我正在尝试从其他 API 获取一些数据,我需要从 JSON 对象获取 StatusCode,但我得到的是 null 对象。

我试图用 StatusCode 变量创建新类,但我得到了空值。我正在尝试获取此数据:

Data(data=[{"Number":"20450143160505","DateCreated":"11-06-2019 10:14:27","DocumentWeight":0.5,"CheckWeight":0,"SumBeforeCheckWeight":0,"PayerType":"Recipient","RecipientFullName":"","RecipientDateTime":"","ScheduledDeliveryDate":"12-06-2019","PaymentMethod":"Cash","CargoDescriptionString":"","CargoType":"Parcel","CitySender":"Сокільники","CityRecipient":"Київ","WarehouseRecipient":"Відділення №150 (до 30 кг): вул. Антоновича, 43 (м.\"Олімпійська\")","CounterpartyType":"PrivatePerson","Redelivery":1,"RedeliverySum":"","RedeliveryNum":"","RedeliveryPayer":"","AfterpaymentOnGoodsCost":"","ServiceType":"WarehouseWarehouse","UndeliveryReasonsSubtypeDescription":"","WarehouseRecipientNumber":150,"LastCreatedOnTheBasisNumber":"","LastCreatedOnTheBasisDocumentType":"","LastCreatedOnTheBasisPayerType":"","LastCreatedOnTheBasisDateTime":"","LastTransactionStatusGM":"","LastTransactionDateTimeGM":"","WarehouseRecipientInternetAddressRef":"916c7c93-8460-11e4-acce-0050568002cf","MarketplacePartnerToken":"","DateScan":"12:23 12.06.2019","ClientBarcode":"","SenderAddress":"","RecipientAddress":"","CounterpartySenderDescription":"","CounterpartyRecipientDescription":"","CounterpartySenderType":"Organization","PaymentStatus":"","PaymentStatusDate":"","AmountToPay":"","AmountPaid":"","WarehouseRecipientRef":"916c7c94-8460-11e4-acce-0050568002cf","DocumentCost":40,"AnnouncedPrice":"","OwnerDocumentNumber":"","DateFirstDayStorage":"2019-06-21","InternationalDeliveryType":"","DaysStorageCargo":"","RecipientWarehouseTypeRef":"841339c7-591a-42e2-8233-7a0a00f0ed6f","StorageAmount":"","StoragePrice":"","VolumeWeight":"0.50","SeatsAmount":"1","OwnerDocumentType":"","ActualDeliveryDate":"2019-06-12 12:23:22","DateReturnCargo":"","CardMaskedNumber":"","Status":"Прибув у відділення","StatusCode":"7","RefEW":"8ed817ef-8c18-11e9-91ff-0025b501a04b","RedeliveryPaymentCardRef":"","RedeliveryPaymentCardDescription":"","CreatedOnTheBasis":"","DatePayedKeeping":"2019-06-21 00:00:00","OnlineCreditStatusCode":"","OnlineCreditStatus":""}])

获取数据的方法

RestTemplate restTemplate = new RestTemplate();
                Data string = restTemplate.postForObject(blalba,blabla,Data.class)

还有我的课

public class Data {
    @JsonProperty("data")
    private JsonNode data;
//get set
}

标签: javajsonresttemplate

解决方案


有几种方法可以实现:

用一个Map<String, Object>

您可以将响应负载读取为Map<String, Object>

ParameterizedTypeReference<HashMap<String, Object>> responseType = 
        new ParameterizedTypeReference<HashMap<String, Object>>() {};

Map<String, Object> responsePayload = 
        restTemplate.exchange(purchaseRequestDetailsEndpoint, HttpMethod.POST,
                new HttpEntity<>(requestPayload), responseType);

String statusCode = responsePayload.get("StatusCode");

仅映射您需要的属性

定义一个类映射您需要的属性:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponsePayload {

    @JsonProperty("StatusCode")
    private String statusCode;
}

并使用上面定义的类读取响应负载:

ResponsePayload responsePayload = 
        restTemplate.postForObject(uri, request, ResponsePayload.class);

String statusCode = responsePayload.getStatusCode();

或者,您可以映射所需的属性并将其余属性存储在地图中:

@Data
public class ResponsePayload {

    @JsonProperty("StatusCode")
    private String statusCode;

    @JsonAnySetter
    private Map<String, Object> properties = new HashMap<>();

    @JsonIgnore
    public Object get(String key) {
        return properties.get(key);
    }
}

推荐阅读