Как получить одно значение ключа из JSON, используя ObjectMapper в java - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть файл json с именем file. json, содержимое которого выглядит следующим образом.

[
  {
    "symbol": "AAPL",
    "quantity": 100,
    "tradeType": "BUY",
    "purchaseDate": "2019-01-02"
  },
  {
    "symbol": "MSFT",
    "quantity": 10,
    "tradeType": "BUY",
    "purchaseDate": "2019-01-02"
  },
  {
    "symbol": "GOOGL",
    "quantity": 50,
    "tradeType": "BUY",
    "purchaseDate": "2019-01-02"
  }
]

Мне нужно получить значения в поле символ в виде списка ["AAPL", "MSFT", "GOOGL"] в JAVA с использованием ObjectMapper. Любые предложения относительно того, как я могу получить значения в символе? Для одной записи json я нашел статьи о том, как отображать значения с помощью POJO с использованием методов получения и установки. Могу ли я сделать то же самое для этой проблемы? Как?

POJO

class Stock {
      private String symbol;
      private float quantity;
      private String tradeType;
      private String purchaseDate;
      public String getSymbol(){
        return this.symbol;
      }
      public float getQuantity(){
        return this.quantity;
      }
      public String getTradeType(){
        return this.tradeType;
      }
      public String getPurchaseDate(){
        return this.purchaseDate;
      }
      public void setSymbol(String symbol) {
       this.symbol = symbol;
      }      
      public void setQuantity(float quantity) {
       this.quantity = quantity;
      }      
      public void setTradeType(String tradeType) {
       this.tradeType = tradeType;
      }      
      public void setPurchaseDate(String purchaseDate) {
       this.purchaseDate = purchaseDate;
      }      
}

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Да, вы можете сделать это.

Ваш JSON представляет массив объектов. Таким образом, вы можете использовать метод readValue, предоставленный Джексоном, и получить массив Java объектов. Это где ваше pojo вступит в игру, так как оно будет представлять объекты.

Stock[] stockArr = mapper.readValue(YourJson, Stock[].class);

Затем вы можете получить доступ к элементам в массиве и вызывать для них ваши получатели.

stockArr[0].getSymbol();

Чтобы получить все символы, просто l oop через массив:)

0 голосов
/ 24 февраля 2020
@Test
public void testSymbols() throws IOException {
    String json = "[\n" + "  {\n" + "    \"symbol\": \"AAPL\",\n" + "    \"quantity\": 100,\n" + "    \"tradeType\": \"BUY\",\n"
            + "    \"purchaseDate\": \"2019-01-02\"\n" + "  },\n" + "  {\n" + "    \"symbol\": \"MSFT\",\n"
            + "    \"quantity\": 10,\n" + "    \"tradeType\": \"BUY\",\n" + "    \"purchaseDate\": \"2019-01-02\"\n" + "  },\n"
            + "  {\n" + "    \"symbol\": \"GOOGL\",\n" + "    \"quantity\": 50,\n" + "    \"tradeType\": \"BUY\",\n"
            + "    \"purchaseDate\": \"2019-01-02\"\n" + "  }\n" + "]";

     List list =  objectMapper.readValue(json ,List.class);
     List<String> symList = new ArrayList<>();
      list.stream().map( m-> ((LinkedHashMap) m).get("symbol")).forEach( o->{
        symList.add((String)o);
      });
      System.out.println(symList);
}

// вывод: [AAPL, MSFT, GOOGL]

...