JsonNode.get()返回null 如何提取JSON中的name和forks字段值
问题根因
你调用的GitHub组织仓库公开接口返回的最外层结构是由仓库信息对象组成的JSON数组,不是单个JSON对象。你解析得到的jsonTree是数组类型的JsonNode,数组本身不存在name属性,直接在根节点调用get("name")必然返回null。
修复实现
你需要遍历根数组下的每一个仓库对象节点,再分别提取每个节点下的name和forks字段即可,修正后的可运行代码如下:
RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "https://api.github.com/orgs/engineyard/repos"; String response = restTemplate.getForObject(resourceUrl, String.class); ObjectMapper mapper = new ObjectMapper(); JsonNode jsonTree = mapper.readTree(response); // 校验根节点类型,避免类型转换报错 if (jsonTree.isArray()) { for (JsonNode repoItem : jsonTree) { String repoName = repoItem.get("name").asText(); int forksCount = repoItem.get("forks").asInt(); // 按需处理提取到的字段,这里做示例打印 System.out.printf("仓库名称:%s,Fork数量:%d%n", repoName, forksCount); } }
可选优化
- 如果后续需要提取更多仓库字段,可以自定义对应字段的Java实体类,直接让RestTemplate把响应反序列化为
List<你的实体类>,省去手动解析JsonNode的步骤,代码可维护性更高。 - 未携带身份凭证调用GitHub公开接口有较低的请求限流阈值,如果运行时出现403限流错误,可以在RestTemplate请求头中添加个人GitHub Token提升限额。
内容的提问来源于stack exchange,提问作者SonyCZK
相关产品推荐
相关产品推荐

