2013-02-23 14 views
5

ジャクソンJSONを使用して解析しようとしている複雑なJSONがあります。私はlatLngオブジェクトに入って、lat、lngの値を引き出す方法について少し混乱しています。これは、JSONの一部です:Jackson JSON Parserの使用:複合JSON?

{ 
    "results": [ 
     { 
      "locations": [ 
       { 
        "latLng": { 
         "lng": -76.85165, 
         "lat": 39.25108 
        }, 
        "adminArea4": "Howard County", 
        "adminArea5Type": "City", 
        "adminArea4Type": "County", 

これは、私はそれを引き出すために、Javaでこれまで持っているものです。

public class parkJSON 
{ 
    public latLng _latLng; 

    public static class latLng 
    { 
     private String _lat, _lng; 
     public String getLat() { return _lat; } 
     public String getLon() { return _lng; } 
    } 
} 

ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally 
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
parkJSON geo = mapper.readValue(parse, parkJSON.class); 

System.out.println(mapper.writeValueAsString(geo)); 
String lat = geo._latLng.getLat(); 
String lon = geo._latLng.getLon(); 
output = lat + "," + lon; 
System.out.println("Found Coordinates: " + output); 

決議これはどのようです将来の参照用にTree Modelを使用して問題を解決しました。

  ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally 
      mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);     
      JsonNode rootNode = mapper.readTree(parse); 
      JsonNode firstResult = rootNode.get("results").get(0); 
      JsonNode location = firstResult.get("locations").get(0); 
      JsonNode latLng = location.get("latLng"); 
      String lat = latLng.get("lat").asText(); 
      String lng = latLng.get("lng").asText(); 
      output = lat + "," + lng; 
      System.out.println("Found Coordinates: " + output); 

答えて

4

あなたが本当にこの入力構造に興味があるのなら、latとlngのフルマッピングはおそらくジャクソンが提供するさまざまなアプローチの中で最も適応していないでしょう。

あなたはこれらのクラスを定義することなく、これらのフィールドを抽出することができますジャクソンによって提供される二つの選択肢があります。

  1. The tree modelは、ツリーを走査し、あなたがしているデータを抽出するには、ナビゲーションメソッドの数を提供しています
  2. Simple data bindingは、JSONドキュメントをマップまたはリストにマップし、これらのコレクションは、これらのコレクションによって提供されるメソッドでナビゲートできます。

ジャクソンのドキュメントには両方のテクニックの例があり、プログラムに適用することはあまり難しくありません。デバッガを使用して、パーサーが作成したデータ構造を調べて、

+0

ツリーモデルのメソッドを使用して作業しています。 –

+0

ObjectMapper mapper = new ObjectMapper(); //再利用できる、グローバルに共有する mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES、false); JsonNode rootNode = mapper.readTree(parse); JsonNode firstResult = rootNode.get( "results")。get(0); JsonNode location = firstResult.get( "locations")。get(0); JsonNode latLng = location.get( "latLng"); 文字列lat = latLng.get( "lat")。asText(); 文字列lng = latLng.get( "lng")。asText(); –

+0

それは素晴らしいです:-)あなたのプロジェクトで幸運。 – fvu

関連する問題