2016-04-20 11 views
2

私はJsonPathを使用してgive jsonから特定の値の最小値を見つけようとしています。 (hereから取られた)JSON次を考えるJayway JsonPathを使用する最小値

{ 
    "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からの例を見て、私は発現後試してみましたが、動作するようには思えません。

Aggregation function attempted to calculate value using empty array 

私が何か間違ったことをしています:

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

は、私は次のエラーを取得しますか?

このようなことを行う正しい方法は何ですか?

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; 
} 
} 

は、溶液中のクラスのmainメソッドを実行して、あなたが望んでいたものを見つけることができます...ハッピー支援

...ただのコメントをチェックしていない人のために

+1

@karthikこの情報はお役に立ちましたか? – Abhishek

+0

@karthik私はこのコードを求めていませんでした。 – Karthik

0

:)、

@ cricket_007がコメントしましたが、これは未解決のバグですcheck here

関連する問題