7

Jackson JSON を使用して解析しようとしている複雑な JSON があります。latLng オブジェクトにアクセスして緯度経度値を取得する方法について少し混乱しています。これは 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);

解決済みこれは、今後の参考のためにツリーモデルを使用して問題を解決した方法です。

            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

2 に答える 2

6

この入力構造に本当に興味があるのがlatであり、lngの完全なマッピングは、データ内のさまざまなレイヤーを表すクラスを作成する必要があるため、Jacksonが提供するさまざまなアプローチの中でおそらく最も適応度が低くなります。

これらのクラスを定義せずにこれらのフィールドを抽出できるようにする、Jacksonが提供する2つの選択肢があります。

  1. ツリーモデルは、ツリーをトラバースして関心のあるデータを抽出するためのさまざまなナビゲーション方法を提供します。
  2. 単純なデータバインディングは、JSONドキュメントをマップまたはリストにマップします。これらのリストは、これらのコレクションによって提供されるメソッドでナビゲートできます。

Jacksonのドキュメントには、両方の手法の例が含まれています。プログラムに適用するのはそれほど難しくありません。デバッガーを使用して、パーサーによって作成されたデータ構造を調べ、ドキュメントがどのようにマッピングされたかを確認してください。

于 2013-02-23T01:38:23.913 に答える