标签: jsonpath

Jsonpath为数组的长度

鉴于json等

{"arr1" : [1,2,3], "arr2" : []}
Run Code Online (Sandbox Code Playgroud)

在哪里知道有名为arr1和arr2的数组,是否有一个jsonpath表达式用于数组的长度,它将适用于空数组和非空数组?

我使用谷歌代码的JsonPath库做了几次尝试,注意:

JsonPath.read(json, "arr1.length")
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误,说数组没有属性.

我正在寻找解析为数组长度的单个字符串路径,而不是后续调用中间体,例如

JsonPath.read(json, "arr1").length // useless to me
Run Code Online (Sandbox Code Playgroud)

表达的任何复杂程度都是可以接受的.

对于上下文,我想提供一个带路径/值对的测试套件,这对于值很有用,但是我不能用这个模式断言数组大小.

arrays size groovy jsonpath spock

6
推荐指数
1
解决办法
7715
查看次数

无论如何,有没有验证jsonpath的语法是否正确?

嗨,我正在尝试找到一种在评估之前验证用户输入的jsonpath的方法。我希望使用正则表达式之类的东西来做到这一点,但到目前为止,我找不到有关如何验证jsonpath语法的任何文档/资源。

所有搜索到的返回资源都涉及评估表达式。甚至jayway.JsonPath库似乎也不执行任何语法检查。

无法对jsonpath语法进行语法检查吗?如果可以的话,请您指出正确的方向。

validation syntax json jsonpath

6
推荐指数
1
解决办法
821
查看次数

JSONPath表达式,用于在条件或第一个值上从数组中获取值

给定JSON结构如下:

{
   "name":"Some Guy",
   "emails":[
      {
         "description":"primary",
         "status":"UNVERIFIED",
         "email":"first@first-email.com"
      },
      {
         "description":"home",
         "status":"VERIFIED",
         "email":"second@second-email.com"
      },
      {
         "description":"away",
         "status":"VERIFIED",
         "email":"third@third-email.com"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

我想要一个JSONPath表达式来获取第一封带有状态的电子邮件,VERIFIED如果没有,那么只需获取数组中的第一封电子邮件.因此,鉴于上面的例子,结果将是second@second-email.com.鉴于这个例子:

{
   "name":"Some Guy",
   "emails":[
      {
         "description":"primary",
         "status":"UNVERIFIED",
         "email":"first@first-email.com"
      },
      {
         "description":"home",
         "status":"UNVERIFIED",
         "email":"second@second-email.com"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

结果将是first@first-email.com.

这是否可以使用JSONPath表达式?

json jsonpath

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

使用JSONPath过滤JSON文档中的属性

我有一个任意定义的JSON文档,并且希望能够对属性应用白名单过滤器之类的JSONPath表达式:保留所有选定节点及其祖先回到根节点,所有其他节点均被删除。如果节点不存在,我应该以空文档结尾。

似乎没有与JSON.Net中内置的类似的东西,并且我在任何地方都找不到类似的示例,所以我建立了自己的示例。我选择将选定的节点复制到新建文档中,而不是尝试删除所有不匹配的节点。鉴于可能存在多个匹配项并且文档可能很大,因此需要能够有效地将多个选择结果合并到单个树/ JSON文档中。

我的尝试有点奏效,但结果却很奇怪。该过程涉及一种MergedAncestry对SelectTokens结果进行迭代,调用的方法GetFullAncestry(将其递归地构建到该节点的树),然后合并结果。不过,似乎JArrays的合并发生在错误的级别,如下面的“实际结果”所示。

我的问题:

  1. 是否有更好/更快/内置的方法来实现这一目标?
  2. 如果没有,我在做什么错?

码:

public static void Main()
{
    string json = @"..."; // snipped for brevity - see DotNetFiddle: https://dotnetfiddle.net/wKN1Hj
    var root = (JContainer)JToken.Parse(json);
    var t3 = root.SelectTokens("$.Array3B.[*].Array3B1.[*].*");

    // See DotNetFiddle for simpler examples that work
    Console.WriteLine($"{MergedAncestry(t3).ToString()}");  // Wrong output!

    Console.ReadKey();
}

// Returns a single document merged using the full ancestry of each of the input tokens
static JToken MergedAncestry(IEnumerable<JToken> tokens)
{
    JObject merged …
Run Code Online (Sandbox Code Playgroud)

c# json.net jsonpath

6
推荐指数
1
解决办法
137
查看次数

具有“jsonpath”依赖项的 Webpack 捆绑包

在部署 lambda 之前,我们使用 webpack 来捆绑它们。自从我们添加了依赖于“jsonpath”的代码以来,代码立即失败,并显示以下内容。

TypeError:无法在 Object.28729 (/.../bundle.js:2) 的 Object.readFileSync (fs.js:346:16) 的 isFileType (fs.js:163:16) 处读取未定义的属性“1”: 4710658)

我对 Webpack 还很陌生,所以我不确定该去哪里。代码工作正常,但它没有捆绑。另外,我尝试过不同版本的 Webpack。有人可以建议如何解决这个问题吗?

bundle jsonpath webpack

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

如何将特定字段从 EventBridge 输入发送到其目标

我在 AWS EventBridge 上收到一个 Webhook 事件。事件 json 正文非常大,我只需将 4 个字段传输到目标。这些字段是:

{"browser_ip":"$.detail.payload.browser_ip","created_at":"$.detail.payload.created_at","email":"$.detail.payload.email","shopify_order_id":"$.详细信息.payload.id"}

我尝试过“配置输入”-->“匹配的 eventInfo 的一部分”选项,但仅当我仅添加 1 个参数(例如“$.detail.payload”)时它才有效。当我添加多个参数时,它说输入路径无效。我找不到任何有关如何添加匹配事件信息的多个部分的示例。是否可以 ?如果是的话我做错了什么?

在此输入图像描述 在此输入图像描述 问候,莉娜

jsonpath amazon-web-services aws-event-bridge

6
推荐指数
1
解决办法
5469
查看次数

使用 EventBridge 输入转换器时如何从状态机输出中提取属性

我在使用 EventBridge 服务将 AWS 状态机返回的值之一作为输入传递到 Lambda 时遇到问题。

我在 AWS Step Functions 中创建了一个状态机来对我们域中的特定问题进行建模。状态机完成后,我想从其中一个 Lambda 内部执行另一项操作。为了实现这一点,我使用 EventBridge 创建了一条新规则:每当状态机完成时,它都会使用特定的 Json 输入触发我的 lambda。

我的问题是如何从状态机输出中提取属性并将它们作为 lambda 输入的属性传递。

假设我的状态机返回以下内容:

{
    "usefulObject":{
        "usefulProperty":"value"
    },
    "anotherProperty":"anotherValue"
}
Run Code Online (Sandbox Code Playgroud)

我想在我的 lambda 中接收以下有效负载:

{
    "property":"value"
}
Run Code Online (Sandbox Code Playgroud)

最初,我认为我可以使用 EventBridge 规则上的“输入转换”选项来完成此操作,例如:

  • 输入转换器路径:
{"propertyValue":"$.usefulObject.usefulProperty"}
Run Code Online (Sandbox Code Playgroud)
  • 输入转换器模板:
{"property":<propertyValue>}
Run Code Online (Sandbox Code Playgroud)

然而,在测试过程中,我意识到事件有效负载包含的数据比状态机输出多得多。实际上,状态机输出被包装在这个“事件容器”对象中,如下所示:

{
    "version": "0",
    "id": "...",
    "detail-type": "Step Functions Execution Status Change",
    "source": "aws.states",
    "account": "...",
    "time": "2020-11-10T13:59:57Z",
    "region": "us-east-1",
    "resources": [
        "...myStateMachineArn..."
    ],
    "detail": {
        "executionArn": "...myStateMachineExecutionArn...",
        "stateMachineArn": "...myStateMachineArn...",
        "name": "ff72036a-2917-c657-80e7-2589b7b76d59",
        "status": "SUCCEEDED",
        "startDate": 1605016794597,
        "stopDate": 1605016797936, …
Run Code Online (Sandbox Code Playgroud)

json jsonpath aws-lambda aws-step-functions aws-event-bridge

6
推荐指数
1
解决办法
2119
查看次数

Kubernetes 列出所有未运行的容器

如何使用Kubectl命令列出所有未运行的容器。我想要像这样的输出

CONTAINER_NAME   STATUS        POD_NAME       NAMESPACE <br>
container_1      Running       pod_1          ns1       <br>
container_2      Not Running   pod_2          ns2       <br>
container_3      Running       pod_2          ns2       <br>
Run Code Online (Sandbox Code Playgroud)

customcolumn jsonpath kubernetes kubectl

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

Json.NET JSONPath 查询未返回预期结果

我正在使用 Newtonsoft 的 Json.Net 从以下 json 中选择节点:

{  
   "projects":[  
      {  
         "name":"Project 1",
         "client":{  
            "code":"ABC",
            "name":"Client 1"
         }
      },
      {  
         "name":"Project 2",
         "client":{  
            "code":"DEF",
            "name":"Client 2"
         }
      },
      {  
         "name":"Project 3",
         "client":{  
            "code":"GHI",
            "name":"Client 3"
         }
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

以下 c# 片段

//json is a JObject representation of the json listed above
var clients =  json.SelectTokens("$.projects[*].client");
Run Code Online (Sandbox Code Playgroud)

产量:

[  
   {  
      "code":"ABC",
      "name":"Client 1"
   },
   {  
      "code":"DEF",
      "name":"Client 2"
   },
   {  
      "code":"GHI",
      "name":"Client 3"
   }
]
Run Code Online (Sandbox Code Playgroud)

这很酷,现在,我想做的是按客户端代码过滤,我认为

$.projects[*].client[?(@.code == 'DEF')]
Run Code Online (Sandbox Code Playgroud)

会工作,但我显然不太了解语法。这将返回一个空列表:

 var test1 …
Run Code Online (Sandbox Code Playgroud)

c# json json.net jsonpath

5
推荐指数
1
解决办法
806
查看次数

如何使用 Python jsonpath_ng 过滤器和其他扩展功能?

我正在尝试使用 Python 从 JSON 中提取有用信息的不同方法。我尝试了 jsonpath_rw_ext 和 jsonpath_ng。现在我可以使用 jsonpath_rw_ext 但 jsonpath_ng 不起作用。我不想放弃 jsonpath_ng 因为我可能没有以正确的方式使用它。检查以下代码:

import jsonpath_rw_ext
from jsonpath_ng.ext import parse
import json
from pprint import pprint


json_str = '''{
    "students": [
        {"name": "Peter", "gender": "Male", "age": 20},
        {"name": "Mary", "gender": "Female", "age": 30},
        {"name": "Susan", "gender": "Female", "age": 40}
    ],
    "teachers": [
        {"name": "William", "gender": "Male", "age": 30},
        {"name": "John", "gender": "Male", "age": 40},
        {"name": "Lucy", "gender": "Female", "age": 50}
    ]
}'''

json_obj = json.loads(json_str)
print 'jsonpath_rw_ext:'
female_students = jsonpath_rw_ext.match('$.students[?gender=="Female"]', …
Run Code Online (Sandbox Code Playgroud)

json jsonpath

5
推荐指数
1
解决办法
3878
查看次数