Java 在嵌套或其他情况下解析JSON比单个值更复杂

Java 在嵌套或其他情况下解析JSON比单个值更复杂,java,json,Java,Json,以下是JSON: { "firstName": "John", "lastName": "doe", "age": 26, "address": { "streetAddress": "123 Main street", "city": "Anytown", "postalCode": "12345" }, "phoneNumbers": [ { "type":

以下是JSON:

{
    "firstName": "John",
    "lastName": "doe",
    "age": 26,
    "address": {
        "streetAddress": "123 Main street",
        "city": "Anytown",
        "postalCode": "12345"
    },
    "phoneNumbers": [
        {
            "type": "iPhone",
            "number": "123-456-8888"
        },
        {
            "type": "home",
            "number": "123-557-8910"
        }
    ]
}
问题是,在Java中,如何访问地址字段?我尝试了address.city之类的方法,但没有成功:

String city = (String) jsonObject.get("address.streetAddress");
System.out.println(city);
如果您有任何建议,我们将不胜感激。

您需要对您得到的address对象调用getString

String city = jsonObject.getJSONObject("address").getString("streetAddress");
首先获取您的地址。地址是一个对象。{}表示对象,[]表示数组

JSONObject addressObj = jsonObject.get("address");
现在您有了地址的引用

String addressStr = addressObj.get("streetAddress");
String cityStr = addressObj.get("city");
int cityInt = Integer.parseInt(addressObj.get("postalCode"));

如果我没有记错的话,应该有getStringstreetAddress和getIntegerpostalCode来避免解析问题。

除了给出的答案之外,在检查city之前,您应该添加一个检查,看看地址是否为空,否则您将得到一个异常。 以下是更新的示例:

if( jsonObject.has("address"){
    JSONObject addressObj = jsonObject.get("address");

    if( addressObj.has("city"){
        String cityStr = addressObj.get("city");
    }
}
if( jsonObject.has("address"){
    JSONObject addressObj = jsonObject.get("address");

    if( addressObj.has("city"){
        String cityStr = addressObj.get("city");
    }
}