2016-04-20 4 views
2

Я пытаюсь найти минимальные значения из json, используя jsonPath.Минимальное использование Jayway JsonPath

Учитывая следующие JSON (из here):

{ 
    "store": { 
     "book": [{ 
      "category": "fiction", 
      "author": "Herman Melville", 
      "title": "Moby Dick", 
      "isbn": "0-553-21311-3", 
      "price": 8.99 
     }, { 
      "category": "fiction", 
      "author": "J. R. R. Tolkien", 
      "title": "The Lord of the Rings", 
      "isbn": "0-395-19395-8", 
      "price": 22.99 
     }] 
    }, 
    "expensive": 10 
    } 

Я пытаюсь выяснить, как минимум всех цен на книги. Поэтому в основном я ожидал:

 min(8.99,22.99) = 8.99 

Глядя на примеры из jsonPath github page о функциях, я попробовал следующее выражение, но это не похоже на работу.

  $..book[*].price.min() 

, но я получаю следующее сообщение об ошибке:

Aggregation function attempted to calculate value using empty array 

я делаю что-то не так?

Каков правильный способ сделать что-то подобное?

EDIT: Вы можете проверить выражения here

+0

И что вы получаете? Работают ли более простые выражения? – weston

+0

'store' - это json-объект и' book' - это json-массив, о котором они знают –

+1

Очень странно, '$ .. book [*]. Price' дает массив чисел, но добавление' .min() 'не работает , – weston

ответ

-1

Ниже ваше решение написано в классе решения ...

import java.util.ArrayList; 
import com.google.gson.GsonBuilder; 

public class Solution { 

public static void main(String[] args) { 
    //building your object 
    SolutionTo objSolutionTo = new SolutionTo(); 
    StoreTO objStoreTO = new StoreTO(); 
    ArrayList<BookTo> objArrayList = new ArrayList<BookTo>(); 
    BookTo objBookTo = new BookTo(); 
    objBookTo.setAuthor("Herman Melville"); 
    objBookTo.setCategory("fiction"); 
    objBookTo.setTitle("Moby Dick"); 
    objBookTo.setIsbn("0-553-21311-3"); 
    objBookTo.setPrice(8.99); 
    BookTo objBookTo2 = new BookTo(); 
    objBookTo2.setAuthor("J. R. R. Tolkien"); 
    objBookTo2.setCategory("fiction"); 
    objBookTo2.setTitle("The Lord of the Rings"); 
    objBookTo2.setIsbn("0-553-21311-3"); 
    objBookTo2.setPrice(22.99); 
    objArrayList.add(objBookTo); 
    objArrayList.add(objBookTo2); 
    objStoreTO.setBook(objArrayList); 
    objSolutionTo.setStore(objStoreTO); 
    objSolutionTo.setExpensive(10.0); 
    System.out.println(new GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(objSolutionTo)); 


    //The logic you require to find the min value of price 
    Double minPrice = Double.MAX_VALUE; 
    for (BookTo bookTo : objSolutionTo.getStore().getBook()) { 
     if (minPrice > bookTo.getPrice()) 
      minPrice = bookTo.getPrice(); 
    } 
    System.out.println(minPrice); 
} 

}

следующий класс solutionTO ::

public class SolutionTo { 
private StoreTO store; 
private Double expensive; 

public StoreTO getStore() { 
    return store; 
} 

public void setStore(StoreTO store) { 
    this.store = store; 
} 

public Double getExpensive() { 
    return expensive; 
} 

public void setExpensive(Double expensive) { 
    this.expensive = expensive; 
} 

} 

Ниже класс StoreTo ::

import java.util.ArrayList; 

public class StoreTO { 
private ArrayList<BookTo> book; 

public ArrayList<BookTo> getBook() { 
    return book; 
} 

public void setBook(ArrayList<BookTo> book) { 
    this.book = book; 
} 

} 

Ниже объекта bookTo ::

public class BookTo { 
private String category; 
private String author; 
private String title; 
private String isbn; 
private Double price; 

public String getCategory() { 
    return category; 
} 

public void setCategory(String category) { 
    this.category = category; 
} 

public String getAuthor() { 
    return author; 
} 

public void setAuthor(String author) { 
    this.author = author; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getIsbn() { 
    return isbn; 
} 

public void setIsbn(String isbn) { 
    this.isbn = isbn; 
} 

public Double getPrice() { 
    return price; 
} 

public void setPrice(Double price) { 
    this.price = price; 
} 
} 

Run основной метод в классе решения вы сможете найти то, что вы хотели ...

Счастливый Помогая ... :)

+1

@ karthik было полезно? – Abhishek

+0

@karthik Я не просил этот код. – Karthik

0

Просто ради людей, которые не проверяют комментарии,

как @ cricket_007 прокомментировал, это открытая ошибка, check here

 Смежные вопросы

  • Нет связанных вопросов^_^