[英]Using Jackson to manually parse JSON
可以使用Jackson库手动解析JSON吗?
也就是说,我不想使用ObjectMapper
并将JSON转换为某些对象,而是想从JSON中选择一些单独的属性,例如在XPath中:
例如,这是我的JSON:
{
"person": {
"name": "Eric",
"surname": "Ericsson",
"address" {
"city": "LA",
"street": "..."
}
}
}
我想要的只是获取Name和City,在这种情况下,我不想引入2个新的Java类( Person
和Address
)并将它们与ObjectMapper
一起使用,但是我只想读取此值,例如XPATH:
伪代码:
String name = myJson.get("person").get("name")
String city = myJson.get("person").get("address").get("city")
您可以使用Jackson树模型和JsonNode#at(...)
方法,该方法将Json Pointer表达式作为参数。
这是一个例子:
public class JacksonJsonPointer {
static final String JSON = "{"
+ " \"person\": {"
+ " \"name\": \"Eric\","
+ " \"surname\": \"Ericsson\","
+ " \"address\": {"
+ " \"city\": \"LA\","
+ " \"street\": \"...\""
+ " }"
+ " }"
+ "}";
public static void main(String[] args) throws IOException {
final ObjectMapper mapper = new ObjectMapper();
final JsonNode json = mapper.readTree(JSON);
System.out.println(json.at("/person/name"));
System.out.println(json.at("/person/address/city"));
}
}
输出:
"Eric"
"LA"
是的,您可以使用Json解析器解析Json,以下是示例示例,您可以在jackson文档中找到更多信息
JsonParser jsonParser = new JsonFactory().createJsonParser(jsonStr);
while(jsonParser.nextToken() != JsonToken.END_OBJECT){
String name = jsonParser.getCurrentName();
if("name".equals(name)) {
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
if("surname".equals(name)) {
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
if("city".equals(name)) {
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.