使用Java(JSON)读取JSON中嵌套键的值
发布时间:2020-12-14 16:39:40 所属栏目:Java 来源:网络整理
导读:我是一个来自 Python背景的新Java程序员.我有天气数据正在以JSON的方式收集/返回,其中包含嵌套的键,我不明白在这种情况下如何拉出值.我相信这个问题以前已经被问过了,但是我发誓我已经有Google Googled了很多,我似乎找不到答案.现在我使用json-simple,但是我
我是一个来自
Python背景的新Java程序员.我有天气数据正在以JSON的方式收集/返回,其中包含嵌套的键,我不明白在这种情况下如何拉出值.我相信这个问题以前已经被问过了,但是我发誓我已经有Google Googled了很多,我似乎找不到答案.现在我使用json-simple,但是我尝试切换到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,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(); } } 解决方法
使用杰克逊的树模型(JsonNode),您有两个“文字”访问器方法(‘get’),它为缺失值返回null,“safe”访问器(‘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程序员容易犯的错误
- Java 打开Excel,往Excel中存入值,保存的excel格式分别是x
- java – Amazon SNS – > SQS消息体
- 有没有办法在我的代码中使用Typescript.Collections.HashTa
- java – 线程安全的Enum Singleton
- java – 无法在drools上运行hello world – KieContainer不
- java – Jooq嵌套选择
- java – EJB:在PostConstruct方法中使用EntityManager
- java – Android上的异步套接字I / O
- java – 将方法绑定到android中的按钮