web-dev-qa-db-ja.com

JSONObjectサブフィールドにアクセスするにはどうすればよいですか?

馬鹿げている気がしますが、しばらくこれを探していました。私はグーグルジオコーダーAPIを使用していますが、jsonの応答について少し助けが必要です。これが私が持っているJSONObjectです:

_{
"viewport": {
    "southwest": {
        "lng": -78.9233749802915,
        "lat": 36.00696951970851
    },
    "northeast": {
        "lng": -78.92067701970849,
        "lat": 36.0096674802915
    }
},
"location_type": "ROOFTOP",
"location": {
    "lng": -78.922026,
    "lat": 36.0083185
}
}
_

「場所」サブフィールドを独自の変数に引き出すにはどうすればよいですか? jsonObjectVariable.getString("location");jsonObjectVariable.getDouble()などを試しましたが、正しく返されません。 jsonオブジェクトのサブフィールドを何と呼びますか? object.subobject構文を使用してサブフィールドにアクセスできることを読みましたが、必要なものが得られません。

(私はライブラリとしてjson-orgを使用しています)

助けてくれてありがとう!

10
El Duderino

Java用のjson.orgライブラリ を使用すると、最初に親JSONObjectインスタンスを取得することによってのみ、オブジェクトの個々のプロパティを取得できます。

_JSONObject object = new JSONObject(json);
JSONObject location = object.getJSONObject("location");
double lng = location.getDouble("lng");
double lat = location.getDouble("lat");
_

次のように、「ドット付き表記」を使用してプロパティにアクセスしようとしている場合:

_JSONObject object = new JSONObject(json);
double lng = object.getDouble("location.lng");
double lat = object.getDouble("location.lat");
_

その場合、json.orgライブラリはあなたが探しているものではありません:それはこの種のアクセスをサポートしていません。


サイドノードとして、質問で指定されたJSONの任意の部分でgetString("location")を呼び出すことは意味がありません。 「location」と呼ばれる唯一のプロパティの値は、「lng」と「lat」と呼ばれる2つのプロパティを持つ別のオブジェクトです。

これを「文字列として」必要な場合、最も近いのは_JSONObject location_(この回答の最初のコードスニペット)でtoString()を呼び出すことです。これにより、_{"lng":-78.922026,"lat":36.0083185}_のようなものが得られます。

19

JsonObjectVariable.getJSONObject( "location")を使用する必要があると思います。これにより、別のJSONObjectが返されます。

次に、そのオブジェクトでgetDouble( "lng")またはgetDouble( "lat")を呼び出すことができます。

例えば。

double lat = jsonObjectVariable.getJSONObject("location").getDouble("lat");
4
Bruce Lowe

「location」サブフィールドをプルするには、ClassLocationを作成する必要があります。

public class Location {
    private double lat;
    private double lng;

@JsonCreator
    public Location(@JsonProperty("lat") double lat, @JsonProperty("lng") double lng {
        this.lat = lat;
        this.lngenter code here = lng;
    }
0
Ihor Bovkit