Вы можете создать класс POJO, а затем использовать библиотеки, такие как Jackson или Gson, для отображения строки JSON в массив экземпляров POJO. В этом случае я буду использовать Jackson, вы можете импортировать его через maven с помощью:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.0</version>
</dependency>
Класс POJO. Обратите внимание, что я использую аннотацию @JsonProperty
для установки имен полей JSON, поэтому я могу избежать использования имен переменных, содержащих специальные символы.
import com.fasterxml.jackson.annotation.JsonProperty;
public class APIResponse {
@JsonProperty("$id")
private int id;
@JsonProperty("accommodation_type")
private String accommodationType;
@JsonProperty("max_people")
private int maxPeople;
public int getId() {
return id;
}
public int getMaxPeople() {
return maxPeople;
}
public String getAccommodationType() {
return accommodationType;
}
@Override
public String toString() {
return "APIResponse{" +
"id=" + id +
", accommodationType='" + accommodationType + '\'' +
", maxPeople=" + maxPeople +
'}';
}
}
Затем вы можете десериализовать, используя:
final String json = "[{\"$id\":\"1\",\"accommodation_type\":\"apartment\",\"max_people\":2},{\"$id\":\"2\",\"accommodation_type\":\"lodge\",\"max_people\":5}]";
final ObjectMapper mapper = new ObjectMapper();
APIResponse[] responses = mapper.readValue(json, APIResponse[].class);
for (APIResponse response: responses) {
System.out.println(response.toString());
}
Результат:
APIResponse{id=1, accommodationType='apartment', maxPeople=2}
APIResponse{id=2, accommodationType='lodge', maxPeople=5}
Наконец, вы можете получить доступ к данным, просто вызвав геттеры в классе POJO:
responses[0].getId(); // 1
responses[1].getAccommodationType; // lodge
Затем, если вы хотите, чтобы данные были разделены запятыми, используйте :
public String[] getByComas(APIResponse[] responses) {
List<String> data = new ArrayList<>();
for (APIResponse response: responses) {
data.add("id,");
data.add(response.getId() + ",");
data.add("accommodation_type,");
data.add(response.getAccommodationType() + ",");
data.add("max_people,");
data.add(response.getMaxPeople() + ",");
}
return data.toArray(new String[data.size()]);
}
Затем просто используйте:
String[] formattedMessage = getByComas(responses);
for (String s: formattedMessage) {
System.out.print(s);
}
Результат:
id,1,accommodation_type,apartment,max_people,2,id,2,accommodation_type,lodge,max_people,5,
Настоятельно рекомендуется использовать JSON мапперы, поскольку они довольно надежны при синтаксическом анализе JSON данные.
Сообщите мне, решит ли это вашу проблему!