2013-09-03 5 views
1

У меня есть следующие JSON ответ:Получение узла из ответов Json

{ 
    "0P0000G5ZQ": [ 
    { 
    "Title": "PIMCO Unconstrained Bond Inst", 
    "ResourceId": "587723", 
    "PublicationTime": "2013-03-07 14:13:00 -0600", 
    "Type": "Research", 
    "Href": null, 
    "VideoThumbnail": null, 
    }, 
    { 
    "Title": "Nontraditional Bond 101", 
    "ResourceId": "609234", 
    "PublicationTime": "2013-08-27 06:00:00 -0500", 
    "AuthorName": "Josh Charney", 
    "Type": "News" 
    "VideoThumbnail": null, 
    }, 
    { 
    "Title": "Investors on the Move as Rates Rise", 
    "ResourceId": "607677", 
    "PublicationTime": "2013-08-16 06:00:00 -0500", 
    "AuthorName": "Christine Benz", 
    "Type": "Video", 
    "SubType": "MSTARVDVD", 
    "VideoThumbnail": 
    "http://im.mstar.com/im/videocenter/130814_flows_largethumb.jpg", 
    } 
    ], 
    "0P0000PZCB": [], 
    "0P00002PYR": [ 
    { 
    "Title": "FPA New Income", 
    "ResourceId": "578826", 
    "PublicationTime": "2012-12-26 00:00:00 -0600", 
    "AuthorName": "Sarah Bush", 
    "Type": "Research", 
    "Href": null, 
    "VideoThumbnail": null, 
    }, 
    { 
    "Title": "FPA New Income, Inc. 2nd Quarter 2013 Conference Call", 
    "ResourceId": "BWIPREM_20130719005736", 
    "PublicationTime": "2013-07-19 12:32:00 -0500", 
    "Source": "Business Wire", 
    "Type": "News", 
    "SubType": "BWIPREMBWIPREM", 
    "VideoThumbnail": null, 
    "AuthorThumbnail": null 
    } 

    ] 
    } 

Мне нужно напечатать следующие узлы из бывшего ответа: «0P0000G5ZQ», «0P0000PZCB», «0P00002PYR» и т.д., а затем в пределах каждого из этих узлов мне нужно утверждать, присутствует ли узел «Заголовок». Узлы ответа: «0P0000G5ZQ», «0P0000PZCB», «0P00002PYR» продолжают меняться в зависимости от службы, которую я запускаю, поэтому мне нужно всегда получать ее из ответа, а не жестко. Я должен сделать это в утверждении скрипта в SoapUI.

Я пытался использовать JSon Slurper, чтобы получить узлы: "0P0000G5ZQ", "0P0000PZCB", "0P00002PYR" и т.д. следующим образом:

import com.eviware.soapui.support.XmlHolder 
import org.apache.commons.lang.StringUtils 
import groovy.json.JsonSlurper 

def holder = new XmlHolder(messageExchange.responseContentAsXml) 
def response = messageExchange.response.responseContent 
log.info response 

def slurper = new JsonSlurper() 
def json = slurper.parseText(response) 
log.info json.each 

, но это возвращает следующую информацию: нулевой.

Может ли кто-нибудь предоставить мне образец кода для этого? Благодарю.

+0

не печатать json.each только печать json –

+0

Просто печать json дает всю структуру. Я просто хочу идентификатор «0P0000G5ZQ». Но вместо этого он дает следующее: INFO: {0P00002CPS = [{Source = PR Newswire, PublicationTime = 2013-08-16 11:27:00 -0500, VideoThumbnail = null, ResourceId = PRNews_20130816PH65337, Тип = Новости, AuthorThumbnail = null, SubType = PRNPREMPRNPREM, Title = Aberdeen Global Income Fund, Inc. объявляет о выплате ежемесячного распределения} – user2743905

ответ

2
def slurp = new groovy.json.JsonSlurper().parseText(jsonStr) 
slurp.each{key, val -> 
    val.each{ 
     assert "Title" in it.keySet() 
    } 
} 

где jsonStr представляет собой вышеупомянутый ответ json в строке. (прилагается в '''yourJson''')

+0

Спасибо за ваш ответ. Эти работы. Я просто хотел спросить вас, что бы утверждение не получилось в следующем случае для узла «0P0000PZCB», поскольку оно не имеет значений в нем или просто пропустит этот узел и утвердит для следующего, у которого есть значения в нем? Мне нужно пропустить узлы, которые не имеют никаких значений, поскольку узел «Заголовок» является необязательным, и мне нужно только утверждать, что этот узел имеет любой контент: «0P0000PZCB»: [], «0P00002PYR»: [ { – user2743905

+0

@ user2743905 Да, он пропустит узел, который не имеет значения. В вашем случае '0P0000PZCB' вообще не будет учитываться. – dmahapatro

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