#java #spring #spring-boot
Вопрос:
Я использую API, который возвращает объект JSON, и я хочу преобразовать его в карту Java без использования библиотеки. Это полезная нагрузка, которую я хочу преобразовать:
{ "customerId": "23408068569991", "data": [ { "nodeId": "HTS", "subscriptionId": "P_HTS_Video_1072", "subscriptionName": "HTS_Video_1053", "subscriptionDescription": "P_HTS_Video_1072", "amountCharged": 0.0, "statusCode": "0000", "adjustmentType": null, "startDate": "2021-09-28 07:41:29", "endDate": "2021-10-18 07:29:40" } ], "links": [], "statusCode": "0000", "statusMessage": "0 Success.", "transactionId": "12677889909988" }
в формат, приведенный ниже:
{ "customerId": "string", "transactionId": "string", "statusMessage": "string", "supportMessage": "string", "services": { "vas_hlr": { "statusCode": "2000", "data": [ { "subscriptionId": "P_HTS_Video_1072", "subscriptionProviderId": "HTC", "subscriptionName": "CHTS_Video_1053", "subscriptionDescription": "P_HTS_Video_1072", "subscriptionStatus": "Inactive", "subscriptionType": "Adhoc", "subscriptionLength": null, "registrationChannel": null, "startDate": "2019-04-30", "endDate": "2019-05-06", "subscriptionPaymentSource": "Airtime", "amountCharged": 50, "sendSMSNotification": true, "beneficiaryId": null, "auto-renew": true, "email": null, "partnerId": "String", "partnerName": "String", "lastDeductionChargeDate": "String" } ] }, } }
Итак, это то, что я опробовал, но не работает:
public class ComvivaCustomerSubscriptions extends APIResponse { private String customerId; private String statusMessage; private String transactionId; private String supportMessage; private Maplt;String, SubscriptionServicegt; services; private APIError apiError; public void joinServices(SubscriptionService customerSubscriptions) { if (customerSubscriptions == null || null == customerSubscriptions.getData()) { return; } String theCustomerId = customerSubscriptions.getCustomerId(); if (theCustomerId != null amp;amp; this.customerId == null) { this.setCustomerId(theCustomerId); } String statusMessage = customerSubscriptions.getStatusMessage(); if (statusMessage != null amp;amp; this.statusMessage == null) { this.setStatusMessage(statusMessage); } setTransactionId(customerSubscriptions.getTransactionId()); setSupportMessage(customerSubscriptions.getSupportMessage()); Maplt;String, SubscriptionServicegt; serviceMap = (Maplt;String, SubscriptionServicegt;) customerSubscriptions.getData(); if (serviceMap == null) { return; } if (this.services == null) { this.services = serviceMap; return; } this.services.putAll(serviceMap); } }
Комментарии:
1. Как это не работает? Что ожидается и каков фактический объем производства?
2. Определите «без библиотеки». В моей книге это означает, что я сам анализирую результат (входной поток, в строку и выполняю некоторые манипуляции с строками, чтобы получить желаемый результат).
3. Я получаю значение null после вызова этого метода joinServices на экземпляре ComvivaCustomerSubscriptions и передачи объекта JSON в качестве параметра. Результат, который я ожидаю получить, — это полезная нагрузка второго сына, которую я разместил выше на странице. Что я имею в виду, не используя библиотеку, так это то, что я имею в виду, не используя Gson и тому подобное.
4. Если вы хотите сделать это без библиотеки, вам придется написать парсер json самостоятельно и с нуля. Я не знаю, почему вы хотите это сделать, но это сложно и требует больших усилий, и здесь на это нет ответа.