Java三方库记录

来源:互联网 发布:mac下载os x yosemite 编辑:程序博客网 时间:2024/05/01 13:44

Java实现SSH

jsch

Ganymed SSH-2 for Java是一个纯Java实现的SHH2库


Java处理sql语句


jsqlparser


http://blog.csdn.net/isea533/article/details/40375183

Java处理html


jsoup


Java处理json串

Jayway JsonPath

https://github.com/json-path/JsonPath 

<dependency>    <groupId>com.jayway.jsonpath</groupId>    <artifactId>json-path</artifactId>    <version>2.3.0</version></dependency>

JsonPath表达式语法

JsonPath表达式形如:$.store.book[0].title 或 $['store']['book'][0]['title']


OperatorDescription$The root element to query. This starts all path expressions.@The current node being processed by a filter predicate.*Wildcard. Available anywhere a name or numeric are required...Deep scan. Available anywhere a name is required..<name>Dot-notated child['<name>' (, '<name>')]Bracket-notated child or children[<number> (, <number>)]Array index or indexes[start:end]Array slice operator[?(<expression>)]Filter expression. Expression must evaluate to a boolean value.FunctionDescriptionOutputmin()Provides the min value of an array of numbersDoublemax()Provides the max value of an array of numbersDoubleavg()Provides the average value of an array of numbersDoublestddev()Provides the standard deviation value of an array of numbersDoublelength()Provides the length of an arrayIntegerOperatorDescription==left is equal to right (note that 1 is not equal to '1')!=left is not equal to right<left is less than right<=left is less or equal to right>left is greater than right>=left is greater than or equal to right=~left matches regular expression [?(@.name =~ /foo.*?/i)]inleft exists in right [?(@.size in ['S', 'M'])]ninleft does not exists in rightsubsetofleft is a subset of right [?(@.sizes subsetof ['S', 'M', 'L'])]sizesize of left (array or string) should match rightemptyleft (array or string) should be empty

JsonPath表达式用法示例

{    "store": {        "book": [            {                "category": "reference",                "author": "Nigel Rees",                "title": "Sayings of the Century",                "price": 8.95            },            {                "category": "fiction",                "author": "Evelyn Waugh",                "title": "Sword of Honour",                "price": 12.99            },            {                "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            }        ],        "bicycle": {            "color": "red",            "price": 19.95        }    },    "expensive": 10}

JsonPath (click link to try)Result$.store.book[*].authorThe authors of all books$..authorAll authors$.store.*All things, both books and bicycles$.store..priceThe price of everything$..book[2]The third book$..book[-2]The second to last book$..book[0,1]The first two books$..book[:2]All books from index 0 (inclusive) until index 2 (exclusive)$..book[1:2]All books from index 1 (inclusive) until index 2 (exclusive)$..book[-2:]Last two books$..book[2:]Book number two from tail$..book[?(@.isbn)]All books with an ISBN number$.store.book[?(@.price < 10)]All books in store cheaper than 10$..book[?(@.price <= $['expensive'])]All books in store that are not "expensive"$..book[?(@.author =~ /.*REES/i)]All books matching regex (ignore case)$..*Give me every thing$..book.length()The number of books

结合Java使用

用法一:使用static JsonPath.read方法直接去读json string
String json = "...";List<String> authors = JsonPath.read(json, "$.store.book[*].author");
用法二:将json string 转换为Object再使用
String json = "...";Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);String author0 = JsonPath.read(document, "$.store.book[0].author");String author1 = JsonPath.read(document, "$.store.book[1].author");
两种用法的区别:
当对同一个json串多次读取时,使用第二种方法,因为第一种方法每次都是构建一个object对象,影响效率。
用法三:
String json = "...";ReadContext ctx = JsonPath.parse(json);List<String> authorsOfBooksWithISBN = ctx.read("$.store.book[?(@.isbn)].author");List<Map<String, Object>> expensiveBooks = JsonPath                            .using(configuration)                            .parse(json)                            .read("$.store.book[?(@.price > 10)]", List.class);

JsonPath结合数据类型构造数据

//Will throw an java.lang.ClassCastException    List<String> list = JsonPath.parse(json).read("$.store.book[0].author")//Works fineString author = JsonPath.parse(json).read("$.store.book[0].author")String json = "{\"date_as_long\" : 1411455611975}";Date date = JsonPath.parse(json).read("$['date_as_long']", Date.class);Book book = JsonPath.parse(json).read("$.store.book[0]", Book.class);TypeRef<List<String>> typeRef = new TypeRef<List<String>>() {};List<String> titles = JsonPath.parse(JSON_DOCUMENT).read("$.store.book[*].title", typeRef);

其他用法

与或非:
[?(@.price < 10 && @.category == 'fiction')] , [?(@.category == 'reference' || @.price > 10)][?(!(@.price < 10 && @.category == 'fiction'))]
过滤器:
import static com.jayway.jsonpath.JsonPath.parse;import static com.jayway.jsonpath.Criteria.where;import static com.jayway.jsonpath.Filter.filter;......Filter cheapFictionFilter = filter(   where("category").is("fiction").and("price").lte(10D));List<Map<String, Object>> books =     parse(json).read("$.store.book[?]", cheapFictionFilter);   Filter fooOrBar = filter(   where("foo").exists(true)).or(where("bar").exists(true));   Filter fooAndBar = filter(   where("foo").exists(true)).and(where("bar").exists(true));




原创粉丝点击