使用Java读取JSON中的嵌套键的值(Jackson)

我是来自Python的新Java程序员。我有正在收集/返回为带有嵌套键的JSON的天气数据,而且我不了解在这种情况下如何提取值。我敢肯定这个问题已经被问过了,但是我发誓我已经用Google搜索了很多东西,但是我似乎找不到答案。现在我正在使用json-

simple,但我尝试切换到Jackson,但仍然不知道如何执行此操作。由于Jackson /

Gson似乎是使用最频繁的库,因此,我很想看看使用其中一个库的示例。下面是数据示例,后面是我到目前为止编写的代码。

{

"response": {

"features": {

"history": 1

}

},

"history": {

"date": {

"pretty": "April 13, 2010",

"year": "2010",

"mon": "04",

"mday": "13",

"hour": "12",

"min": "00",

"tzname": "America/Los_Angeles"

},

...

}

}

主功能

public class Tester {

public static void main(String args[]) throws MalformedURLException, IOException, ParseException {

WundergroundAPI wu = new WundergroundAPI("*******60fedd095");

JSONObject json = wu.historical("San_Francisco", "CA", "20100413");

System.out.println(json.toString());

System.out.println();

//This only returns 1 level. Further .get() calls throw an exception

System.out.println(json.get("history"));

}

}

函数’historical’调用另一个返回JSONObject的函数

public static JSONObject readJsonFromUrl(URL url) throws MalformedURLException, IOException, ParseException {

InputStream inputStream = url.openStream();

try {

JSONParser parser = new JSONParser();

BufferedReader buffReader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));

String jsonText = readAll(buffReader);

JSONObject json = (JSONObject) parser.parse(jsonText);

return json;

} finally {

inputStream.close();

}

}

回答:

使用Jackson的树模型(JsonNode),您既有“文字”访问器方法(“ get”)null和“安全”访问器(“

path”),“访问”方法返回缺失值,又有“安全”访问器(“ path”),它们使您可以遍历“缺失”节点。因此,例如:

JsonNode root = mapper.readTree(inputSource);

int h = root.path("response").path("history").getValueAsInt();

它将返回给定路径的值,或者,如果缺少路径,则返回0(默认值)

但是更方便的是,您可以只使用JSON指针表达式:

int h = root.at("/response/history").getValueAsInt();

还有其他方法,通常将结构建模为普通旧Java对象(PO​​JO)更为方便。您的内容可能适合以下内容:

public class Wrapper {

public Response response;

}

public class Response {

public Map<String,Integer> features; // or maybe Map<String,Object>

public List<HistoryItem> history;

}

public class HistoryItem {

public MyDate date; // or just Map<String,String>

// ... and so forth

}

如果是这样,您将遍历结果对象,就像处理任何Java对象一样。

以上是 使用Java读取JSON中的嵌套键的值(Jackson) 的全部内容, 来源链接: utcz.com/qa/405187.html

回到顶部