java - 如何从 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
}
解决方案
有几种方法可以实现:
用一个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);
}
}
推荐阅读
- android - 如何在适配器类中显示所有图像 URL 以及用户名、标题、uid、时间戳
- javascript - Javascript 时间戳在遥远的未来
- node.js - NPM 构建问题 - Salesforce UX
- linux - 如何在 linux shell 中用新值替换“-u 用户名 -p 密码”?
- xamarin.android - getLastSignedInAccount / LastSignedInAccount
- spring-boot - Spring Security 5 OAuth2 Client 可以与基于传统 Spring Seucrity OAuth 的 AuthorizationServer 一起使用
- reactjs - 如何减少 React-Native 加载时间
- bash - 做while循环不会遍历所有代码行,而只是循环吗?
- php - 如何为每个循环在php中插入多行?
- string - 加密算法说明