2 回答
TA贡献1825条经验 获得超6个赞
与往常一样,有几种可能的方法。
除了手动解析和提取方法(如何在 Spring 中加载资源并将其内容用作字符串),您还可以尝试更高级的方法并使用像 jackson-databind 这样的库(https://github.com/FasterXML /杰克逊数据绑定)。
假设您的资源中有这个 json 对象:
{
"foo" : {
"bar" : 42
}
}
并且 Jackson ObjectMapper 已经注入:
@Autowired
private ObjectMapper objectMapper;
选项 1:对 JsonNode 使用通用方法
@Autowired
ObjectMapper objectMapper;
@RequestMapping("/")
JsonNode home() throws IOException {
JsonNode jsonNode = objectMapper.readTree(resourceFile.getFile());
return jsonNode.get("foo").get("bar");
}
选项 2:https : //github.com/FasterXML/jackson-databind#1-minute-tutorial-pojos-to-json-and-back
TA贡献1831条经验 获得超10个赞
这只是带有一些建议的@ibexit 答案的变体。
在 ibexit 答案中使用选项 2(使用 pojo),除非您确实需要 JsonNode(您需要 JsonNode 的可能性舍入为 0%)。
创建一个 POJO 将您的 Json 表示为一个对象。请参阅下面的示例。
我建议您使用@JsonIgnoreProperties(ignoreUnknown = true)注释。进行谷歌搜索。
在您的示例中,不需要使用@JsonProperty注释,但我喜欢使用它。
还有其他方法可以设置“ignoreUnknown”值,Jackson 文档是一本很好且有价值的读物。
POJO 示例
@JsonIgnoreProperties(ignoreUnknown = true)
public class TopClass
{
@JsonProperty("foo") // This is optional in your example.
private Foo foo;
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo
{
@JsonProperty("bar")
private int bar;
}
读取 POJO 的示例代码
private TopClass topClassVariableName;
topClassVariableName = objectMapper.readValue(JSON HERE, TopClass.class);
添加回答
举报