あなたは何がそれに言及し、あなたの「行が」のようなものであると考えられる行われないので、私は、あなたがどのような方法で緯度/経度のペアを処理するつもりはないと仮定しています:
final class Location {
final int ratingBest = Integer.valueOf(0);
final int reviewCount = Integer.valueOf(0);
@JsonAdapter(PackedCoordinateTypeAdapter.class)
final String coordinate = null;
}
特定のタイプのアダプタをフィールドにバインドする@JsonAdapter
アノテーションを見てください。タイプのアダプタは、次のようになります。
final class PackedCoordinateTypeAdapter
extends TypeAdapter<String> {
private static final String DELIMITER = " ";
private static final String LATITUDE = "latitude";
private static final String LONGITUDE = "longitude";
private static final Pattern delimiterPattern = compile(DELIMITER);
// Keep private stuff private as much possible, Gson can access it
private PackedCoordinateTypeAdapter() {
}
@Override
@SuppressWarnings("resource")
public void write(final JsonWriter out, final String packedLatitudeLongitude)
throws IOException {
final String[] split = decode(packedLatitudeLongitude);
out.beginObject();
out.name(LATITUDE);
out.value(split[0]);
out.name(LONGITUDE);
out.value(split[1]);
out.endObject();
}
@Override
public String read(final JsonReader in)
throws IOException {
String latitude = null;
String longitude = null;
in.beginObject();
while (in.hasNext()) {
final String name = in.nextName();
switch (name) {
case LATITUDE:
latitude = in.nextString();
break;
case LONGITUDE:
longitude = in.nextString();
break;
default:
throw new MalformedJsonException("Unexpected: " + name);
}
}
in.endObject();
return encode(latitude, longitude);
}
private static String encode(final String latitude, final String longitude)
throws MalformedJsonException {
if (latitude == null) {
throw new MalformedJsonException("latitude not set");
}
if (longitude == null) {
throw new MalformedJsonException("longitude not set");
}
return latitude + DELIMITER + longitude;
}
private static String[] decode(final String packedLatitudeLongitude)
throws IllegalArgumentException {
final String[] split = delimiterPattern.split(packedLatitudeLongitude);
if (split.length != 2) {
throw new IllegalArgumentException("Cannot parse: " + packedLatitudeLongitude);
}
return split;
}
}
デモ:
final Location response = gson.fromJson("{\"ratingBest\":10,\"reviewCount\":1,\"coordinate\":{\"latitude\":\"-7.2768\",\"longitude\":\"112.7927\"}}", Location.class);
System.out.println(response.coordinate);
System.out.println(gson.toJson(response));
出力:
-7.2768 112.7927
{ "ratingBest":10、 "reviewCount":1、 "coordinate":{"緯度": " - 7.2768"、 "経度": "112.7927"}
あなたはどのようにしていますか?状況を成就させるために? Gsonでモデルをどこに保存していますか? –
まだ実装されていません。しかし、私はAndroidでORMLiteヘルパーを使用し、APIからのJsonレスポンスをパラメータとして 'create()'メソッドを呼び出すだけです。そして、私は 'String'という名前で保存された1つのフィールド' coordinate'を必要とします.Gsonはそれぞれの応答を特定のタイプに自動的に変換します。 – fanjavaid