馬鹿げている気がしますが、しばらくこれを探していました。私はグーグルジオコーダー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を使用しています)
助けてくれてありがとう!
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}
_のようなものが得られます。
JsonObjectVariable.getJSONObject( "location")を使用する必要があると思います。これにより、別のJSONObjectが返されます。
次に、そのオブジェクトでgetDouble( "lng")またはgetDouble( "lat")を呼び出すことができます。
例えば。
double lat = jsonObjectVariable.getJSONObject("location").getDouble("lat");
「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;
}