2017-08-27 8 views
0

JsonObjectを緯度と経度のArrayListに変換したいと思います。私は結果を出さずに3日間この問題に取り組んでいました。助けてください!JSONObjectsをArrayListに変換する

はここに私のJSONです:

{ 
    "hits":[ 
     { 
     "_geoloc":{ 
      "lat":33.842624, 
      "lng":-5.480229 
     }, 
     "objectID":"-KsPQUlvJK-PCSrH3Dq3" 
     }, 
     { 
     "_geoloc":{ 
      "lat":33.84878, 
      "lng":-5.481698 
     }, 
     "objectID":"-KsPQUloi4BAduevPJta" 
     } 
    ], 
    "nbHits":2, 
    "page":0, 
    "nbPages":1, 
    "hitsPerPage":20, 
    "processingTimeMS":1, 
    "exhaustiveNbHits":true, 
    "query":"", 
    "params":"aroundLatLng=33.62727138006218%2C-4.498191252350807&aroundRadius=545000" 
} 

ここに私のコードです:

client.getIndex("users").searchAsync(query, new CompletionHandler() { 
    @Override 
    public void requestCompleted(JSONObject jsonObject, AlgoliaException e) { 
    } 
}); 
+0

対応するJavaモデルもありますか? – nullpointer

+1

対応するモデル(POJO)を作成し、JSONライブラリでそれを実行させます。 JSONツリーを手動で解析するのは2回しかありません:1)あなたは時間で支払われます。2)デフォルトの直列化が処理できない特別な使用例があります。私は#1については分かりませんが、#2はここでは適用されないようです。 –

+0

ここには、アクセスするライブラリに応じて定義されたソリューションはほとんどありません https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java 重複した質問 – Geek

答えて

0

あなたがこの(http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html)を行うためにJsonObjectのメンバー・メソッドを使用することができます。たとえば、次のようなもの:あなたはJSONのLIBとしてfastjsonを使用している場合

class GeoPoint { 
    private double lat; 
    private double lon; 
    public GeoPoint(double lat, double lon) { 
     this.lat = lat 
     this.lon = lon 
    } 
    // ... 
} 
ArrayList<GeoPoint> list = new ArrayList<>(); 
// Thankfully JsonArray objects are iterable... 
for (JsonValue e : jsonObject.getJsonArray("hits")) { 
    JsonObject coordWrapper = (JsonObject) e; 
    JsonObject coord = coordWrapper.getJsonObject("_geoloc"); 
    double lat = coord.getJsonNumber("lat").doubleValue(); 
    double lon = coord.getJsonNumber("lon").doubleValue(); 
    list.add(new GeoPoint(lat, lon)); 
} 
+0

注:これはJsonObjectクラスを持たないJava SEではなく、Java EE APIです –

0

、あなたはこのようにそれを行うことができます。

public class GeoLoc { 
    private double lng; 
    private double lat; 
    // getter & setter... 
} 

public class Geo { 
    private String objectID; 

    @JSONField(name = "_geoloc") 
    private GeoLoc geoLoc; 
    // getter & setter... 
} 

public static void main(String[] args) { 
    String jsonStr = ""; // Your json string here. 
    JSONObject jsonObject = JSON.parseObject(json); 
    JSONArray jsonArray = jsonObject.getJSONArray("hits"); 
    List<Geo> geos = jsonArray.toJavaList(Geo.class); 
    List<GeoLoc> geoLocs = geos.stream() 
      .map(Geo::getGeoLoc) 
      .collect(Collectors.toList()); 
} 

明示的にリストに変換する必要はありませんが、fastjsonがためにそれを行います君は。

関連する問題