{
def expectedParse = new JsonSlurper().parseText(expected)
def actualParse = new JsonSlurper().parseText(actual)
def parentnode
def dynmaicparent
def ignorefields = ignore.split(',')
for(int i =0; i <ignorefields.size(); i++){
values=ignorefields[i].trim()
//log.info( i + \"id to remove \" + values)
if(values.contains('.')){
parentnode = values.tokenize(\".\")[0]
childnode = values.substring(parentnode.length()+1)
log.info( expectedParse.get(parentnode).size())
for(int j =0; j <expectedParse.get(parentnode).size(); j++){
expectedParse.get(parentnode).get(j).remove(childnode)
actualParse.get(parentnode).get(j).remove(childnode)
}
}
else
{
expectedParse.remove(values)
actualParse.remove(values)
}
}
log.info(\"after removing ignore field $expectedParse\")
log.info(\"updated actualParse is $actualParse\")
assert expectedParse == actualParse
}
to compare two json response i can use below function but in the current context response return some dynamic fields which will be unique every time, can some one please explain how we can handle this
void compareResponse(def atcualresponse, def expectedREsponse){
def map1 = new JsonSlurper().parseText(atcualresponse)
def map2 = new JsonSlurper().parseText(expectedREsponse)
assert map1 == map2
}
to compare two json response i can use below function but in the current context response return some dynamic fields which will be unique every time, can some one please explain how we can handle this
void compareResponse(def atcualresponse, def expectedREsponse){
def map1 = new JsonSlurper().parseText(atcualresponse)
def map2 = new JsonSlurper().parseText(expectedREsponse)
assert map1 == map2
}
vpnkumar :
\n\n
As you written some values are dynamically changing, so is it changing for 1 json and not changing for another json?
\n\n
if this is the scenario then you need to write your custom code to match two json by ignoring those dynamic fields.
\n","body@stripHtml({\"removeProcessingText\":false,\"removeSpoilerMarkup\":false,\"removeTocMarkup\":false,\"truncateLength\":200})@stringLength":"218","kudosSumWeight":2,"postTime":"2020-07-15T21:38:31.338-07:00","lastPublishTime":"2020-07-15T21:38:31.338-07:00","metrics":{"__typename":"MessageMetrics","views":4365},"visibilityScope":"PUBLIC","placeholder":false,"showMoveIndicator":false,"originalMessageForPlaceholder":null,"isEscalated":null,"solution":false,"replies":{"__typename":"MessageConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[{"__typename":"MessageEdge","cursor":"MjUuNHwyLjF8b3wzfDE0OjAsMzk6MXwx","node":{"__ref":"AcceptedSolutionMessage:message:204823"}}]},"customFields":[],"attachments":{"__typename":"AttachmentConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"ModerationData:moderation_data:204823":{"__typename":"ModerationData","id":"moderation_data:204823","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"AcceptedSolutionMessage:message:204823":{"__typename":"AcceptedSolutionMessage","author":{"__ref":"User:user:90133"},"id":"message:204823","entityType":"FORUM_REPLY","eventPath":"category:ready_api_forums/community:nwkab66374board:readyapi-questions/message:204570/message:204823","revisionNum":1,"uid":204823,"depth":2,"hasGivenKudo":false,"subscribed":false,"board":{"__ref":"Forum:board:readyapi-questions"},"parent":{"__ref":"ForumReplyMessage:message:204667"},"conversation":{"__ref":"Conversation:conversation:204570"},"subject":"Re: Compare two REST response and ignore some fields","moderationData":{"__ref":"ModerationData:moderation_data:204823"},"body":"
Thanks Msiadak and HimanshuTayal, I was able to solve it at last below is the generic function that I used and solved most of my needs
private void compare(def expected, def actual, def ignore)
{
def expectedParse = new JsonSlurper().parseText(expected)
def actualParse = new JsonSlurper().parseText(actual)
def parentnode
def dynmaicparent
def ignorefields = ignore.split(',')
for(int i =0; i <ignorefields.size(); i++){
values=ignorefields[i].trim()
//log.info( i + \"id to remove \" + values)
if(values.contains('.')){
parentnode = values.tokenize(\".\")[0]
childnode = values.substring(parentnode.length()+1)
log.info( expectedParse.get(parentnode).size())
for(int j =0; j <expectedParse.get(parentnode).size(); j++){
expectedParse.get(parentnode).get(j).remove(childnode)
actualParse.get(parentnode).get(j).remove(childnode)
}
}
else
{
expectedParse.remove(values)
actualParse.remove(values)
}
}
log.info(\"after removing ignore field $expectedParse\")
log.info(\"updated actualParse is $actualParse\")
assert expectedParse == actualParse
}
There's no easy way to do this that I am aware of. I am still learning a lot of JSON stuff myself so I may be missing something. Even so, I do not think there's a straight forward way without you building or providing some logic to force the groovy script to ignore said dynamic fields.
That being said, if you can provide the json responses that would help. Indicate also which fields you need ignored.
This is the sample request, where all the nodes, sub nodes and their respective values need to be compared but VId, qn, LId and SessionId are the nodes which should be ignored
{
\"Sample1\": [
{
\"deatils1\": [
{
\"Key\": \"value\"
}
],
\"details2\": {
\"d1\": \"v1\",
\"d2\": \"v2\",
\"d3\": \"v3\",
\"d4\": \"v4\",
\"d5\": \"v5\",
\"d6\": \"v6\"
},
\"VId\": \"65465456465465465hgjhffjlk\",
}
],
\"Status\": \"good\",
\"qn\": \"BX10149384\",
\"LId\": \"45675675675465465\",
\"SessionId\": \"656465456435353543\",
}
I did some research into this and I do not see it being possible without including extra JAR files to introduce the required behavior. At least, not easily, and outside of my experience with JSON objects. Sorry. I may keep digging in but this will require some heavy lifting and custom code, which may not be ideal if upkeep of said code may be a problem.
","body@stripHtml({\"removeProcessingText\":false,\"removeSpoilerMarkup\":false,\"removeTocMarkup\":false,\"truncateLength\":200})@stringLength":"203","kudosSumWeight":1,"repliesCount":2,"postTime":"2020-07-15T11:54:48.689-07:00","lastPublishTime":"2020-07-15T11:54:48.689-07:00","metrics":{"__typename":"MessageMetrics","views":4293},"visibilityScope":"PUBLIC","placeholder":false,"showMoveIndicator":false,"originalMessageForPlaceholder":null,"isEscalated":null,"solution":false,"customFields":[],"attachments":{"__typename":"AttachmentConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"QueryVariables:MessageSolutions":{"__typename":"QueryVariables","id":"MessageSolutions","value":{"first":10,"constraints":{"topicId":{"eq":"message:204570"},"solution":{"eq":true}},"sorts":{"postTime":{"direction":"ASC"}},"useAvatar":true,"useAuthorLogin":true,"useAuthorRank":false,"useBody":true,"useKudosCount":false,"useTimeToRead":false,"useMedia":true,"useRepliesCount":false,"useSearchSnippet":false,"useAcceptedSolutionButton":true,"useSolvedBadge":false,"useAttachments":true,"useTags":false,"useUserHoverCard":false,"useNodeHoverCard":false,"usePreviewSubjectModal":false,"useMessageStatus":false}},"CachedAsset:text:en_US-components/messages/EscalatedMessageBanner-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/EscalatedMessageBanner-1749759380271","value":{"escalationMessage":"Escalated to Salesforce by {username} on {date}","viewDetails":"View Details","modalTitle":"Case Details","escalatedBy":"Escalated by: ","escalatedOn":"Escalated on: ","caseNumber":"Case Number: ","status":"Status: ","lastUpdateDate":"Last Update: ","automaticEscalation":"automatic escalation","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1749759380271","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1749759380271","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1749759380271","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSolvedBadge-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSolvedBadge-1749759380271","value":{"solved":"Solved"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1749759380271","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1749759380271","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1749759380271","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1749759380271","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSolutionList-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSolutionList-1749759380271","value":{"emptyDescription":"No has been message solutions yet"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListMenu-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListMenu-1749759380271","value":{"postTimeAsc":"Oldest","postTimeDesc":"Newest","kudosSumWeightAsc":"Least Liked","kudosSumWeightDesc":"Most Liked","sortTitle":"Sort By","sortedBy.item":" { itemName, select, postTimeAsc {Oldest} postTimeDesc {Newest} kudosSumWeightAsc {Least Liked} kudosSumWeightDesc {Most Liked} other {}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/AcceptedSolutionButton-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/AcceptedSolutionButton-1749759380271","value":{"accept":"Mark as Solution","accepted":"Marked as Solution","errorHeader":"Error!","errorAdd":"There was an error marking as solution.","errorRemove":"There was an error unmarking as solution.","solved":"Solved","topicAlreadySolvedErrorTitle":"Solution Already Exists","topicAlreadySolvedErrorDesc":"Refresh the browser to view the existing solution"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Pager/PagerLoadMore-1749759380271","value":{"loadMore":"Show More"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1749759380271","value":{"bylineAuthor":"{bylineAuthor}","bylineBoard":"{bylineBoard}","anonymous":"Anonymous","place":"Place {bylineBoard}","gotoParent":"Go to parent {name}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1749759380271","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1749759380271","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false},"CachedAsset:text:en_US-components/common/ExternalLinkWarningModal-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/common/ExternalLinkWarningModal-1749759380271","value":{"title":"Leaving the Community","description":"You're about to leave this site and navigate to an external domain. Are you sure you want to continue?","action.submit":"Continue","action.cancel":"Go Back"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1749759380271":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagView/TagViewChip-1749759380271","value":{"tagLabelName":"Tag name {tagName}"},"localOverride":false}}}},"page":"/forums/ForumMessagePage/ForumMessagePage","query":{"boardId":"readyapi-questions","messageSubject":"compare-two-rest-response-and-ignore-some-fields","messageId":"204570"},"buildId":"3XH0qYWYCnEYycuN5W4S8","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","surveysEnabled":true,"openTelemetry":{"clientEnabled":false,"configName":"smartbear","serviceVersion":"25.4.0","universe":"prod","collector":"http://localhost:4318","logLevel":"error","routeChangeAllowedTime":"5000","headers":"","enableDiagnostic":"false","maxAttributeValueLength":"4095"},"apolloDevToolsEnabled":false,"quiltLazyLoadThreshold":"3"},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["components_seo_QAPageSchema","components_community_Navbar_NavbarWidget","components_community_Breadcrumb_BreadcrumbWidget","components_messages_TopicWithThreadedReplyListWidget","components_messages_MessageListForNodeByRecentActivityWidget","components_messages_RelatedContentWidget","components_customComponent_CustomComponent","components_messages_MessageView_MessageViewStandard","components_messages_ThreadedReplyList","components_messages_EscalatedMessageBanner","shared_client_components_common_List_UnstyledList","components_messages_MessageView","shared_client_components_common_Pager_PagerLoadMore","components_messages_MessageView_MessageViewInline","components_customComponent_CustomComponentContent_TemplateContent","shared_client_components_common_List_UnwrappedList","components_tags_TagView","components_tags_TagView_TagViewChip"],"appGip":true,"scriptLoader":[]}