2015-08-28 134 views
2

可以使用Jackson库手动解析JSON吗?使用Jackson手动解析JSON

I.e.我不想用ObjectMapper和转换JSON一些对象,而是我想选择JSON个别属性,如在XPath中:

例如,这是我的JSON:

{ 
    "person": { 
     "name": "Eric", 
     "surname": "Ericsson", 
     "address" { 
     "city": "LA", 
     "street": "..." 
     } 
    } 
} 

和所有我想要的只是获取名称和城市,对于这种情况我不想引入2个新的Java类(PersonAddress)并将它们与ObjectMapper一起使用,但我只想读取xPath中的值:

Pseudocode:

String name = myJson.get("person").get("name") 
String city = myJson.get("person").get("address").get("city") 
+0

[JsonPath](https://github.com/jayway/JsonPath)可以是你的兴趣。 – jpmc26

回答

1

是使用JSON解析器可以解析您的JSON,下面是你可以找到更多的杰克逊文档中的一个样本例如

 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()); 
     } 
    } 
1

您可以使用the Jackson tree modelJsonNode#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"