标签: jsonpath

通过 jsonpath 断言状态

我想添加一个监视器来检测不健康的服务并在这种情况下发送警报。我公开了一个简单的 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')]

我无法让它在我的情况下工作

谢谢

jsonpath site24x7

3
推荐指数
1
解决办法
382
查看次数

json 路径表达式在没有数组的情况下不起作用

我正在尝试实现一个看似简单的 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)

c# json.net jsonpath

3
推荐指数
1
解决办法
2608
查看次数

使用 REST Assured,如何检查响应的 json 对象类型数组中是否存在某个字段?

我需要验证像下面这样的响应是否包含一些字段。我对字段值不感兴趣 - 只是对键存在感兴趣。例如,我想检查这种类型的响应中是否存在键“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

3
推荐指数
1
解决办法
8213
查看次数

是否有一种允许访问父节点并具有多选功能的 JSON 查询语言?

JSON 有很多查询语言,例如 JMES Path 和 JSON Path,但我发现的没有一个让我感兴趣,例如 JSON Path 不允许多选查询(我无法返回具有不同类型元素的列表 [汽车、飞机、船])和 JMES 路径与 JSON 路径相比确实更简单,并且允许多选,但不允许访问父节点,例如 .. 或parent(@) 或 $(对于源)。所以我想要一种可以同时完成这两个任务的语言,如果可能有一种像 JMES Path 这样简单的查询语言,但如果只有一种并且是最困难的一种,那没关系,我会接受它!

PS:我用javascript工作!

json jsonpath jmespath

3
推荐指数
1
解决办法
1493
查看次数

如何在golang中获取所有具有jsonpaths的对象

我在 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 go jsonpath

3
推荐指数
1
解决办法
4007
查看次数

根据JSONPATH中数组中的字符串过滤Json

我有一种情况,我有一个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可以提供类似的功能,欢迎任何帮助.

jsonpath

2
推荐指数
3
解决办法
1万
查看次数

JSONPath-获取对象othervalue等于字符串的所有值

几个小时的阅读和尝试所有的我脑子里浮现的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/

json jsonpath

2
推荐指数
1
解决办法
3923
查看次数

加特林-从JSON数组响应中提取数据

如果我有这种回应:

{
  "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 [*]进行操作会引发错误。

arrays json jsonpath gatling

2
推荐指数
1
解决办法
3656
查看次数

使用Scala中的JsonPath从json字符串获取特定参数

我有一个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)

有人可以告诉我我在这里想念什么吗?

scala jsonpath

2
推荐指数
1
解决办法
1397
查看次数

当密钥在Powershell中包含点(句点)时,从JSON中解析值

在此输入图像描述

在上面的例子中,我想从"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可能是其他字符串...)

powershell json jsonpath

2
推荐指数
1
解决办法
752
查看次数