鉴于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)
表达的任何复杂程度都是可以接受的.
对于上下文,我想提供一个带路径/值对的测试套件,这对于值很有用,但是我不能用这个模式断言数组大小.
嗨,我正在尝试找到一种在评估之前验证用户输入的jsonpath的方法。我希望使用正则表达式之类的东西来做到这一点,但到目前为止,我找不到有关如何验证jsonpath语法的任何文档/资源。
所有搜索到的返回资源都涉及评估表达式。甚至jayway.JsonPath库似乎也不执行任何语法检查。
无法对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表达式:保留所有选定节点及其祖先回到根节点,所有其他节点均被删除。如果节点不存在,我应该以空文档结尾。
似乎没有与JSON.Net中内置的类似的东西,并且我在任何地方都找不到类似的示例,所以我建立了自己的示例。我选择将选定的节点复制到新建文档中,而不是尝试删除所有不匹配的节点。鉴于可能存在多个匹配项并且文档可能很大,因此需要能够有效地将多个选择结果合并到单个树/ JSON文档中。
我的尝试有点奏效,但结果却很奇怪。该过程涉及一种MergedAncestry对SelectTokens结果进行迭代,调用的方法GetFullAncestry(将其递归地构建到该节点的树),然后合并结果。不过,似乎JArrays的合并发生在错误的级别,如下面的“实际结果”所示。
我的问题:
码:
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) 在部署 lambda 之前,我们使用 webpack 来捆绑它们。自从我们添加了依赖于“jsonpath”的代码以来,代码立即失败,并显示以下内容。
TypeError:无法在 Object.28729 (/.../bundle.js:2) 的 Object.readFileSync (fs.js:346:16) 的 isFileType (fs.js:163:16) 处读取未定义的属性“1”: 4710658)
我对 Webpack 还很陌生,所以我不确定该去哪里。代码工作正常,但它没有捆绑。另外,我尝试过不同版本的 Webpack。有人可以建议如何解决这个问题吗?
我在 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”)时它才有效。当我添加多个参数时,它说输入路径无效。我找不到任何有关如何添加匹配事件信息的多个部分的示例。是否可以 ?如果是的话我做错了什么?
我在使用 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
如何使用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) 我正在使用 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) 我正在尝试使用 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) jsonpath ×10
json ×5
c# ×2
json.net ×2
arrays ×1
aws-lambda ×1
bundle ×1
customcolumn ×1
groovy ×1
kubectl ×1
kubernetes ×1
size ×1
spock ×1
syntax ×1
validation ×1
webpack ×1