Добавление вложенного объекта используя класс Formbody.Builder
Имеется код Java/kotlin, который собирает объект json и отправляет post-запрос на сервер, а конкретно - на скрипт php, который, в свою очередь, добавляет данный объект в файл json. Данные махинации мне необходимы для того, чтобы собирать данные о геолокации с устройств и посылать их на сервер для дальнейшей обработки сайтом - отображение полученных широты/долготы на карте. Для этого необходимо, чтобы объекты в файле json были упорядочены по id, где в id вложен объект с данными об устройстве. Вот код, который отправляет объект на сервер:
MainActivity.java
RequestBody formBody = new FormBody.Builder()
.add("pseudoID",m_szDevIDShort)
.add("latitude", format1.replace(',','.'))
.add("longitude", format2.replace(',','.'))
.add("velocity", vel)
.add("distance", dis)
.add("date", time)
.add("azimuth",azimuth.replace(',','.'))
.add("accuracy",accuracy.replace(',','.'))
.build();
//конечная цель(куда посылать пост-запрос)
Request request = new Request.Builder()
.url("https://geokrasnodar.ru/postJson.php")
.addHeader("User-Agent", "OkHttp Bot")
.post(formBody)
.build();
//обработка исключений
try (Response response = httpClient.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
// Вывести ответ в консоль
System.out.println(response.body().string());
}
}
И, собственно сам полученный объект
token_data.json
{"pseudoID":"353597872677244",
"latitude":"45.24368",
"longitude":"38.97344",
"azimuth":"253.6",
"accuracy":"14.7"}
Из чего я хочу сделать данный объект - вложенным в другой, то есть привести к такому виду:
[ID] =>{"latitude":"45.24368",
"longitude":"38.97344",
"azimuth":"253.6",
"accuracy":"14.7"},
[ID] => {
...
...
},
[ID] => ...
Ломаю голову, но всё равно пока что не могу понять, как это можно реализовать
Ответы (1 шт):
Если я вас правильно понял, то вам в качестве результирующей структуры данных подойдет обычная коллекция типа ключ - значение. Тогда можно сделать примерно так:
import com.google.gson.Gson;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String json = "{\"pseudoID\":\"353597872677244\",\n"
+ "\"latitude\":\"45.24368\",\n"
+ "\"longitude\":\"38.97344\",\n"
+ "\"azimuth\":\"253.6\",\n"
+ "\"accuracy\":\"14.7\"}";
Gson gson = new Gson();
SrcModel fromJson = gson.fromJson(json, SrcModel.class);
List<SrcModel> srcModels = Collections.singletonList(fromJson);
Map<Long, TargetModel> resultMap = srcModels.stream()
.collect(Collectors.toMap(k->k.getPseudoID(),
v->TargetModel.builder()
.latitude(v.getLatitude())
.longitude(v.getLongitude())
.azimuth(v.getAzimuth())
.accuracy(v.getAccuracy())
.build()));
String result = gson.toJson(resultMap);
System.out.println(result);
}
}
@lombok.Data
@lombok.NoArgsConstructor
@lombok.AllArgsConstructor
@lombok.Builder
class SrcModel {
private Long pseudoID;
private Double latitude;
private Double longitude;
private Double azimuth;
private Double accuracy;
}
@lombok.Data
@lombok.NoArgsConstructor
@lombok.AllArgsConstructor
@lombok.Builder
class TargetModel {
private Double latitude;
private Double longitude;
private Double azimuth;
private Double accuracy;
}