jus*_*y88 4 groovy parsing json soapui jsonslurper
我在 Ready!Api 1.9.0 中使用 Groovy 脚本来解码 SOAP 响应中返回的 Base64 字符串,并将生成的 JSON 对象存储在 json 文件中。然后获取生成的文件并使用 JsonSlurper 解析它以获取 Map 对象。
需要迭代该对象,以便我可以找到一个键并断言其值。我无法弄清楚为什么找不到钥匙。如果我直接使用 map.get(key) 调用键,则会收到错误“没有此类属性”。如果我直接使用 map.get('key') 调用它,它会返回 null。我也尝试过Map.each{k -> log.info("${k}")}返回“interface.java.util.Map”而不是预期的键列表。
//create file path
def respFile = "C:\\Users\\me\\Documents\\Temp\\response.json"
//set originaldata in response to var
def response1 = context.expand( '${Method#Response#declare namespace ns4=\'com/service/path/v4\'; declare namespace ns1=\'com/other/service/path/v4\'; //ns1:RequestResponse[1]/ns1:GetAsset[1]/ns1:Asset[1]/ns4:DR[1]/ns4:Sources[1]/ns4:Source[1]/ns4:OriginalData[1]}' )
//decode the data
byte[] decoded = response1.decodeBase64()
//create file using file path above if it doesnt exist
def rf = new File(respFile)
//write data to file NOTE will overwrite existing data
FileOutputStream f = new FileOutputStream(respFile);
f.write(decoded);
f.close();
//begin second file
import groovy.json.JsonSlurper;
def inputFile = new File("C:\\Users\\me\\Documents\\Temp\\response.json")
def parResp = new JsonSlurper().parse(inputFile)
//test to find key
Map.each{k -> log.info("${k}")}
Run Code Online (Sandbox Code Playgroud)
.. // 解析前的 json 示例,但不是完整的 json:
{
"Response": {
"ecn": 1000386213,
"header": {
"msgRefNum": "bbb-ls-123"
},
"success": true,
"duplicatedit": false,
"subjectReturnCode": 1,
"subject": [
{
"uu": 11264448,
"name": {
"name3": "WINSTON BABBLE",
"dob": "19700422",
"gender": "2",
"ecCoded": "160824",
"ecCodeSegment": "ZZ"
},
"acc": [
{
"ftp": "01",
"Number": "AEBPJ3977L",
"issued": "20010101",
"mMode": "R"
} ],
"telephone": [
{
"telephoneType": "01",
"telephoneNumber": "9952277966",
"mMode": "R"
} ],
"address": [
{
"line1": "M\/O HEALTH AND FAMILY WELFARE",
"sCode": "07",
"cCode": 110009,
"ac": "04",
"reportedd": "160430",
"mMode": "R",
"mb": "lakjsdf blorb"
},
Run Code Online (Sandbox Code Playgroud)
问题标题已经说得很清楚了,我们来回答一下吧。
x.json给定包含 content 的文件{"foo":42,"bar":true},以下代码片段读取该文件并打印所有键值对:
def map = new groovy.json.JsonSlurper().parse(new File('x.json'))
map.each { key, value ->
println "$key : $value"
}
Run Code Online (Sandbox Code Playgroud)
结果(有趣的花絮:键被重新排序,但这应该不重要):
bar : true
foo : 42
Run Code Online (Sandbox Code Playgroud)
现在你的问题的主体很混乱。所有的开始看起来都是无关紧要的,所以我不确定上面的代码片段会有所帮助,但我希望它会有所帮助。
现在关于你的奇怪结果interface java.util.Map:
Map.each { println it }yield interface java.util.Map,这是完全正常的,您正在“迭代”对象Map.class,而不是读取 json 文件产生的地图对象。
另一种方式来说明这一点:
Map.each { println it }
Integer.each { println it }
123.each { println it }
"HI!".each { println it }
Run Code Online (Sandbox Code Playgroud)
结果:
interface java.util.Map
class java.lang.Integer
123
H
I
!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14818 次 |
| 最近记录: |