我想添加一个监视器来检测不健康的服务并在这种情况下发送警报。我公开了一个简单的 REST API -/healthy它返回一个 JSON 例如{"healthy": true}。
然后我添加了一个REST API Monitor到我的 site24x7 帐户,将内容检查响应格式设置为 JSON,现在我应该提供一个要断言的 JSONPath。
在 JSONPath 在线测试器中,当我使用时,$.healthy我得到了[true]. 但我想我应该尝试断言该返回值。
使用以下表达式不起作用
$.(@healthy=='true')
$.[?(@.healthy=='true')]
$[?(@.healthy=='true')]
$?(.healthy=='true')
$.healthy=='[true]'
$.healthy==[true]
$.healthy==['true']
Run Code Online (Sandbox Code Playgroud)
我认为我应该使用或过滤来评估断言表达式()。
我如何断言返回健康状态?
在 site24x7 示例中,我看到 JSONPath 表达式的示例
$..[?(@.overallStatus=='true')]
我无法让它在我的情况下工作
谢谢
我正在尝试实现一个看似简单的 JSON 路径过滤器,但未能使其正常工作。想知道其他对 Json.NET 的 JSON 路径实现有更多经验的人是否对后续步骤有想法。
这种情况失败了,但我认为应该可行?
var jsonText = @"{
'event': {
'data': {
'intField': 1,
'stringField': 'hello'
}
}
}";
JObject json = JsonConvert.DeserializeObject<JObject>(jsonText);
string jsonPath = "$.event.data[?(@.intField == 1)]";
IList<JToken> output = json.SelectTokens(jsonPath).ToList();
// this check fails
Assert.IsTrue(output.ToList().Count > 0);
Run Code Online (Sandbox Code Playgroud)
如果我通过在“数据”对象周围添加虚拟数组来处理 JSON 有效负载,那么我就可以让查询正常工作。但是,我宁愿不处理 JSON 有效负载。
var jsonText = @"{
'event': {
'data': [{
'intField': 1,
'stringField': 'hello'
}]
}
}";
JObject json = JsonConvert.DeserializeObject<JObject>(jsonText);
string jsonPath = "$.event.data[?(@.intField == 1)]";
IList<JToken> output = json.SelectTokens(jsonPath).ToList();
// now …Run Code Online (Sandbox Code Playgroud) 我需要验证像下面这样的响应是否包含一些字段。我对字段值不感兴趣 - 只是对键存在感兴趣。例如,我想检查这种类型的响应中是否存在键“id”。我将如何实现这一目标?
[
{
"id":"1",
"title":"Title",
"details":"details",
"benefit":"Welcome",
"expirationTimestamp":1549995900,
"notice":"some text",
}
]
Run Code Online (Sandbox Code Playgroud)
如果我做
given()
.spec(reqSpec).
when()
.get().
then()
.body("$", hasKey("id"));
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
java.lang.AssertionError: 1 expectation failed.
JSON path $ doesn't match.
Expected: map containing ["id"->ANYTHING]
Actual: [{blabla=something, id=1, details=details, etc=etc}]
Run Code Online (Sandbox Code Playgroud)
请问,有人可以向我解释一下这应该如何工作吗?
json jsonpath rest-assured web-api-testing rest-assured-jsonpath
JSON 有很多查询语言,例如 JMES Path 和 JSON Path,但我发现的没有一个让我感兴趣,例如 JSON Path 不允许多选查询(我无法返回具有不同类型元素的列表 [汽车、飞机、船])和 JMES 路径与 JSON 路径相比确实更简单,并且允许多选,但不允许访问父节点,例如 .. 或parent(@) 或 $(对于源)。所以我想要一种可以同时完成这两个任务的语言,如果可能有一种像 JMES Path 这样简单的查询语言,但如果只有一种并且是最困难的一种,那没关系,我会接受它!
PS:我用javascript工作!
我在 golang 中使用 jsonpath 但无法获取 iPhone 类型中包含的以下 json 的所有对象:
{
"firstName": "John",
"lastName": "doe",
"age": 26,
"address": {
"streetAddress": "naist street",
"city": "Nara",
"postalCode": "630-0192"
},
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
},
{
"type": "home",
"number": "0123-4567-8910"
},
{
"type": "iPhone",
"number": "0123-4567-8910"
}
]}
Run Code Online (Sandbox Code Playgroud)
我正在使用 golang,我知道以下 jsonpath 可以工作:
$.phoneNumbers[?(@.type == "iPhone")]
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,它是一个服务,我在其中输入了如下所示的 json 路径:
$.[*].phoneNumbers[*].type
Run Code Online (Sandbox Code Playgroud)
我必须寻找的价值是通过以下方式实现的:
values, err := jsonpath.Get(jsonPath, data)
for _, value := range values {
if err != nil {
continue
}
if value.(string) …Run Code Online (Sandbox Code Playgroud) 我有一种情况,我有一个json String,它有一个子类作为只包含字符串的数组.是否可以获得包含特定String的数组的对象引用.例:
{ "Books":{
"History":[
{
"badge":"y",
"Tags":[
"Indian","Culture"
],
"ISBN":"xxxxxxx",
"id":1,
"name":"Cultures in India"
},
{
"badge":"y",
"Tags":[
"Pre-historic","Creatures"
],
"ISBN":"xxxxxxx",
"id":1,
"name":"Pre-historic Ages"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
要实现:从上面的JSON字符串中,需要获取历史记录中包含"tags"列表中"Indian"的所有书籍.
我在我的项目中使用JSONPATH但是如果有其他API可以提供类似的功能,欢迎任何帮助.
几个小时的阅读和尝试所有的我脑子里浮现的JSON路径表达式之后,两个逻辑表达式和无感表情,我仍然不知道我怎么能提取所有cmis:objectId地方cmis:objectTypeId等于F:cm:custom从所有object对象,无论嵌套深度:
{
{... [... nested objects and arrays as needed for a tree strucutre
object : {
"succinctProperties": {
"cmis:objectTypeId": "F:cm:custom",
"cmis:objectId": "39cdd896-4563-4302-bba9-398006572522",
...
}
},
}... }... close nested objects and arrays as needed for a tree strucutre
"id": "e244881e-e96b-406b-8d1f-faecae35d7f2"
}
Run Code Online (Sandbox Code Playgroud)
我尝试并从数百次尝试中节省下来的一些东西:
$.[*]..succinctProperties[?(@['cmis:objectTypeId']=='F:wim:caseEntries')].cmis:objectId
$.[*]..succinctProperties.cmis:objectId // Returns ALL without condition
$.[*].*..succinctProperties[?(@.['cmis:objectTypeId']=='F:wim:caseEntries')]
$.[*]..succinctProperties[@.cmis:objectTypeId=='F:wim:caseEntries')].cmis:objectId
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是http://www.jsonquerytool.com/,因为我使用的是JMeter插件“ JSON Path Extractor”,而此插件使用的是http://goessner.net/articles/JsonPath/
如果我有这种回应:
{
"A": 2,
"B": [
{
"CCC": "abcde",
"DDD": {
"EEE": 11,
"FFF": 22
}
},
{
"CCC": "fghij",
"DDD": {
"EEE": 111,
"FFF": 222
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我怎么能得到所有列表或其他 CCC值?
如果我使用:
.check(jsonPath("$..CCC").saveAs("VARIABLE"))
Run Code Online (Sandbox Code Playgroud)
我只得到第一个CCC(“ abcde”)。通过CCC [*]进行操作会引发错误。
我有一个json字符串,我想在Scala中使用JsonPath从此json提取参数。鉴于杰森:
{
"message_payload":"6b700b000006",
"message_encryption_version":"2.0",
"message_version":"1.0",
"message_metadata":{
"marketplace_id":"1",
"workflow_id":"5906bd4e-52eb-4e2d-9a16-034fb67572f1",
"hostname":"dev-dsk-shivabo-2b-3c0a1bd6.us-west-2.amazon.com",
"event_type":"MerchantRegistrationFraudEvaluation",
"event_date":"1513665186657"
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使用下面的代码来获取一些示例中找到的参数event_type,但它会引发错误:
val eventType = JsonPath.read(jsonString, "$.message_metadata.event_type")
Run Code Online (Sandbox Code Playgroud)
错误:
error: ambiguous reference to overloaded definition,
[scalac-2.11] both method read in object JsonPath of type [T](x$1: String, x$2: String, x$3: com.jayway.jsonpath.Predicate*)T
[scalac-2.11] and method read in object JsonPath of type [T](x$1: Any, x$2: String, x$3: com.jayway.jsonpath.Predicate*)T
[scalac-2.11] match argument types (String,String)
[scalac-2.11] val eventType = JsonPath.read(jsonString, "$.message_metadata.event_type");
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我在这里想念什么吗?
在上面的例子中,我想从"System.WorkItemType"中获取值"Bug"
运用
$response = Invoke-RestMethod -Url $someUri -Method Get -ContentType "application/json" -Headers $headers
$wit = response.fields.System.WorkItemType
Run Code Online (Sandbox Code Playgroud)
由于点/周期搞砸了,所以不起作用.
在javascript中有这个问题和答案,但在Powershell中不起作用.
使用正则表达式用下划线替换点似乎太牵强了(我没有让它工作,但使用-match -convertFrom-Json -replace -convertTo-Json所以可能做错了?
所以我的问题很简单:如何从'System.WorkItemType'键中获取'Bug'值?(bug可能是其他字符串...)