JSON响应解析有时候数组有时是文本

时间:2014-10-27 11:06:49

标签: arrays json rest groovy jmeter

我有两项服务:注册和搜索,回复相同:

{
   "STDCode": "022",
   "Name": "MyName",
   "mobileNumber": 9876543210,
   "otherPhoneNumbers": [
      1111111111,
      2222222222,
      3333333333
   ],
   "language": "EN",
   "gender": "M",
   "Address": "......"
}

虽然响应相同,但JMeter中传递的断言对于两者都有所不同。

我使用jsonSlurper将结果解析为

import groovy.json.*
def slurper = new JsonSlurper()
def result = slurper.parseText(prev.getResponseDataAsString())

我成功使用的断言是

assert result.Name == "MyName"
// Successful with register fails with search
assert result.Name[0] == "MyName"
// Successful with search fails with register

只是想知道为什么我必须在某个时候使用数组结构,有时断言工作没有数组结构[0]?这是我在使用解析函数时缺少的东西,还是开发人员编写服务的方式?

1 个答案:

答案 0 :(得分:2)

您的两个回复相同。有一点不同。在result.farmerProfile.Name的路径中是一个列表。例如。 (注意[{...}]那里):

import groovy.json.*
def slurper = new JsonSlurper()
def result = slurper.parseText('''\
[{
   "STDCode": "022",
   "Name": "MyName",
   "mobileNumber": 9876543210,
   "otherPhoneNumbers": [
      1111111111,
      2222222222,
      3333333333
   ],
   "language": "EN",
   "gender": "M",
   "Address": "......"
}]''')

println result.Name // [MyName]
println result.Name[0] // MyName
println result*.Name // [MyName]
println result*.Name[0] // MyName

原因是隐式传播运算符(注意*.Name)。因此,您很可能在一个中列出farmerProfile,在另一个中列出对象本身。这是有道理的,因为我认为搜索能够返回多个。