2016-03-07 3 views
-1

Я пытаюсь разобрать этот JSON, который приходит как ответ на вызов REST API. Можете ли вы помочь мне разобрать его как ключевые пары значений?Parse JSON без имени объекта в Java

Имена объектов отсутствуют. Существует также гнездование. Кажется, нет никакой новой линии между записями.

Цель состоит в том, чтобы извлечь эти данные и загрузить их в базу данных.

[ 
    { 
     "cc_emails":["[email protected]"], 
     "fwd_emails":[], 
     "reply_cc_emails":["[email protected]"], 
     "fr_escalated":false, 
     "spam":false, 
     "email_config_id":6000038087, 
     "group_id":6000110481, 
     "priority":1, 
     "requester_id":6010410791, 
     "responder_id":6002817857, 
     "source":1, 
     "company_id":null, 
     "status":2, 
     "subject":"fare", 
     "to_emails":["[email protected]"], 
     "product_id":null, 
     "id":45043, 
     "type":null, 
     "due_by":"2016-03-12T08:58:02Z", 
     "fr_due_by":"2016-03-08T08:58:02Z", 
     "is_escalated":false, 
     "description":"Dear xyze Team,\r\n\r\nWhy r u increased fair again and againasas0mail.gmail.com</a>.<br>\n", 
     "custom_fields": 
     { 
      "category":null, 
      "issue":null, 
      "route_id":null, 
      "phone_number":null, 
      "department":null, 
      "booking_id":null 
     }, 
     "created_at":"2016-03-07T08:58:02Z", 
     "updated_at":"2016-03-07T08:58:03Z", 

// ...... repeat 

} 
] 
+1

У вас еще ничего не было? # – nafas

ответ

0

Лучший способ сделать это было бы использовать http://www.jsonschema2pojo.org/ Введите свой JSON там Изменить тип источника в формат JSON установить правильное имя класса и пакет. Полученное pojo может быть непосредственно сопоставлено с json

Если вы используете resttemplate для попадания в api, то вы можете использовать getForObject для автоматического установки pojo с выхода.

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject-java.lang.String-java.lang.Class-java.lang.Object...-

0

Использование gson вы можете сделать это довольно просто.

ли класс, чтобы соответствовать поля в JSon что-то вроде:

public class Example { 
     private List<String> cc_emails; 
     private List<String> fwd_emails; 
     private List<String> reply_cc_emails; 
     private Boolean fr_escalated; 
     private Boolean spam; 
     private Integer email_config_id; 
     ... 
     private CustomFields custom_fields; 
     private String created_at; 
     private String updated_at; 

    } 

Тогда вам нужно сделать, другой для отображения пользовательских полей

public class CustomFields { 

    private String category; 
    ... 


} 

И с помощью JSON вы можете разобрать его, как это:

Type type = new TypeToken<Collection<Example>>(){}.getType(); 
new Gson().fromJson(json,type); 

Вы должны exaplain в Gson это список, если бы это был один объект он бы это:

new Gson().fromJson(json,Example.class); 

Это я обычно Подход взять, также в датах java.sql.Timestamp класса также могут разобрать его, вам нужно будет попробовать, хотя.

+0

Спасибо, что сделали это так просто! :-) Я определил структуру первого уровня в одном классе, а затем использовал Map вместо класса для customFields. Чтобы получить первый уровень значения ключа: для (int i = 0; i

+0

Вы также должны проверить нули, поскольку вы разбираете json из другого источника. Но так как вы итерацию через всю карту, попробуйте следующее: 'для (String S: gson.get (я) .getCustom_fields() значения().) { ... }' , если заинтересованы в обоих ключ и значение, вы должны использовать это: 'for (Map.Entry s: strings.entrySet()) { ... }' – Tiago

Смежные вопросы