Отображение объекта json в карту Java

#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 самостоятельно и с нуля. Я не знаю, почему вы хотите это сделать, но это сложно и требует больших усилий, и здесь на это нет ответа.