簡體   English   中英

使用Jackson手動解析JSON

[英]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類( PersonAddress )並將它們與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM