2015-03-11 2 views
4

У меня есть нижняя строка JSON из ниже. Я хочу найти/найти критерии в JSON String.Как искать/находить В JSON с java

1). Найти количество присутствующих клавиш. 2). Для того, чтобы получить значение данного ключа (если у нас есть массив)

{ 
"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 
} 

Я ищу решение, как Groovy GPATH Синтаксис

  • store.book - размер этого массива.
  • магазин.книга [*]. Категория - как может ключ присутствовать в массиве.
  • store.bicycle - если он обнаружил, что должен вернуть истинное значение

ответ

6

Вы также можете использовать проект JsonPath, предоставленный REST Assured. В этом проекте JsonPath используются выражения Groovy GPath. В Maven вы можете положиться на него, как это:

<dependency> 
    <groupId>com.jayway.restassured</groupId> 
    <artifactId>json-path</artifactId> 
    <version>2.4.0</version> 
</dependency> 

Примеры:

Чтобы получить список всех книг категории:

List<String> categories = JsonPath.from(json).get("store.book.category"); 

Получить первой категории книги:

String category = JsonPath.from(json).get("store.book[0].category"); 

Получить категорию последней книги:

String category = JsonPath.from(json).get("store.book[-1].category"); 

Получить все книги с ценой от 5 до 15:

List<Map> books = JsonPath.from(json).get("store.book.findAll { book -> book.price >= 5 && book.price <= 15 }"); 

GPATH является очень мощным, и вы можете использовать функции высшего порядка и всех Groovy структур данных в выражениях пути.

+0

Есть ли для этого документация? http://groovy.codehaus.org/GPath больше не существует. –

+1

На сайте REST Assured имеется документация. См. Здесь: https://github.com/jayway/rest-assured/wiki/Usage#example-3---complex-parsing-and-validation – Johan

0

Я хотел бы попробовать следующую библиотеку

https://github.com/jayway/JsonPath

http://jsonpath.herokuapp.com/?path=%24.store.book[ *]

дает вам все книги

+0

Привет Дэвид, я использую тот же, только, но я ищу код Java для выше выпуск. Например, если я даю параметр метода как «store.book [*]. Category» этот ключ JSON должен указать, сколько ключей присутствует в этом как java int – Ssire

+0

Я думаю, что вы получаете их как список, а затем можете используйте функцию http://docs.oracle.com/javase/7/docs/api/java/util/List.html#size%28%29 –

+0

Благодаря @David Michael Gang, я получил решение.еще раз спасибо за ваш ценный ввод – Ssire

0

Прежде всего, вы должны добавить DEPENDENCY

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20090211</version> 
</dependency> 

Затем вы можете использовать этот код:

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.json.XML; 

public class Main { 

    public static int PRETTY_PRINT_INDENT_FACTOR = 4; 
    public static String TEST_XML_STRING = 
     "<Result><ResultParameters><ResultParameter><Key>TransEndDate</Key><Value>20170731</Value></ResultParameter><ResultParameter><Key>Failed Reason</Key><Value>Operator 03058361178\03058365278 has no permission to perform the Check Balance service.</Value></ResultParameter><ResultParameter><Key>TransEndTime</Key><Value>123611</Value></ResultParameter></ResultParameters><ResultCode>2000</ResultCode><ResultType>0</ResultType><OriginatorConversationID>S_X20130129210125</OriginatorConversationID><ResultDesc>Initiator authentication error.</ResultDesc><TransactionID>000749213589</TransactionID><ConversationID>AG_20170731_00004c28e51f1f822e9e</ConversationID></Result>"; 

    public static void main(String[] args) { 
     try { 
      JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING); 
      String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR); 
      System.out.println(jsonPrettyPrintString); 


      System.out.println("Element="+xmlJSONObj.getJSONObject("Result").getInt("ResultCode")); 

     } catch (JSONException je) { 
      System.out.println(je.toString()); 
     } 
    } 
} 

// in it i am searching an element which is present in a json object 
Смежные вопросы