2016-09-28 10 views
0

У меня есть запрос, связанный с тем, как получить длину json-массива в процессоре JSR223 Post с использованием groovy. Внутри массива «outBound» имеется 2 информационных блока. Мне нужно получить длину массива «outBound», чтобы я мог поместить длину в цикл for. Я также хочу получить массив данных json (как есть), которые содержат параметр «taxType»: «GST». Для, например: здесь вторая информация имеет значение GST .. так хотелось принести вторую инфо JSon массивКак получить длину json-массива в JSR223 Почтовый процессор с использованием groovy

{ 
     "details": [ 
     { 
      "outBound": [ 
      { 
       "info": { 
       "date": "2016-08-11", 
       "class": "M", 
       "code": 70, 
       "pricing": [ 
        { 
        "totalAmount": 68.8, 
        "totalTaxAmount": 30.8, 
        "baseFareAmount": 38.0 
        } 
       ], 
       "totalAmount": 68.8, 
       "totalDuration": 160, 
      "referenceNumber": 1, 
      "type": "RP", 
      "id": 1 
      }, 
      "segments": [ 
      { 
      "date": "2016-08-11", 
      "className": "Standard (W)", 
      "code": 70, 
      "totalAmount": 68.8, 
      "totalDuration": 160, 
      "referenceNumber": 1, 
      "type": "RP", 
      "duration": 160, 
      "number": "100" 

      } 
      ] 
     }, 
     { 
      "info": { 
      "date": "2016-08-11", 
      "class": "M", 
      "code": 70, 
      "pricing": [ 
       { 
       "totalAmount": 78.8, 
       "totalTaxAmount": 40.8, 
       "baseFareAmount": 38.0 
       } 
      ], 
      "totalAmount": 78.8, 
      "totalDuration": 160, 
      "referenceNumber": 2, 
      "type": "RP", 
      "id": 2, 
      "gstAmount": { 
      "taxType": "GST" 
     }, 

      }, 
      "segments": [ 
      { 
      "date": "2016-08-11", 
      "className": "Standard (W)", 
      "code": 70, 
      "totalAmount": 78.8, 
      "totalDuration": 160, 
      "referenceNumber": 2, 
      "type": "RP", 
      "duration": 160, 
      "number": "200" 

      }, 
      { 
      "date": "2016-08-11", 
      "className": "Standard (W)", 
      "code": 70, 
      "totalAmount": 78.8, 
      "totalDuration": 160, 
      "referenceNumber": 2, 
      "type": "RP", 
      "duration": 160, 
      "number": "100" 

      } 
      ] 
     } 
     ], 
     "resultCount": { 
     "count1": 1, 
     "count2": 1 
     }, 
     "displayCount": 2 
    } 
    ] 
    } 

>Expected Output: 

    { 
      "info": { 
      "date": "2016-08-11", 
      "class": "M", 
      "code": 70, 
      "pricing": [ 
       { 
       "totalAmount": 78.8, 
       "totalTaxAmount": 40.8, 
       "baseFareAmount": 38.0 
       } 
      ], 
      "totalAmount": 78.8, 
      "totalDuration": 160, 
      "referenceNumber": 2, 
      "type": "RP", 
      "id": 2, 
      "gstAmount": { 
      "taxType": "GST" 
      }, 

      }, 
      "segments": [ 
      { 
      "date": "2016-08-11", 
      "className": "Standard (W)", 
      "code": 70, 
      "totalAmount": 78.8, 
      "totalDuration": 160, 
      "referenceNumber": 2, 
      "type": "RP", 
      "duration": 160, 
      "number": "200" 

      }, 
      { 
      "date": "2016-08-11", 
      "className": "Standard (W)", 
      "code": 70, 
      "totalAmount": 78.8, 
      "totalDuration": 160, 
      "referenceNumber": 2, 
      "type": "RP", 
      "duration": 160, 
      "number": "100" 

      } 
      ] 
     } 
+0

Описание кажется запутанным. Можете ли вы объяснить, что вы пытаетесь сделать? –

+0

Вы хотите получить только коллекцию 'info', правильно? Если вы выберете только коллекцию' info', она не даст вам другую часть, например 'segment'? –

+0

Большое вам спасибо за ответ. Первое, что я хочу, это получить длину массива «outBound». Вы можете увидеть правильную структуру кода в json viewer. Во-вторых, чтобы получить блок, содержащий как «info», так и «сегмент», который имеет параметр «taxType»: «GST». Его, как исходящий [0], является первой информацией, а сегменты и исходящие [1] - это вторая информация и сегменты. – Jyothi

ответ

0

Не совсем уверен, что я понял, но если бы я сделал это то, что вам нужно:

def res = new groovy.json.JsonSlurper().parseText(json) 
def outBound = res.details[0].outBound 
println outBound.size() 
println groovy.json.JsonOutput.toJson(outBound.find { it.info.gstAmount?.taxType == "GST" }) 

json является String экземпляр проведения вашего json.

построчно:

  1. Groovy потребляет ваш JSon.
  2. Вы извлечь outBound массив из первого пункта details массива
  3. Печать размер outBound массива
  4. Форматирование обратно в Json первый элемент outBound массива, info.gstAmout.taxType свойство «GST» (вопрос знак после gstAmount совершает изящество с возможным отсутствием этого имущества)

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

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