在 JsonPath 中,我看到“$”符号被描述为“引用根对象或元素”的符号。
例子:
JsonPath.read(json, "$.store.book[*].author");
Run Code Online (Sandbox Code Playgroud)
问题:有什么理由不以“$”开头的路径吗?
在 Jayway 中,您可以省略“$”。在路径的起点处并得到相同的结果。
但是,有理由这样做吗?
我想使用Python Flask框架实现HTTP PATCH。作为输入,我将收到如下 JSON 补丁:
[
{ "op": "replace", "path": "/work/title", "value": "Senior Engineer" }
]
Run Code Online (Sandbox Code Playgroud)
我的数据库是 MongoDB,我想将上述补丁直接应用到 Mongo。例如,下面是 Mongo 中存储的文档:
{
"name":"ABC",
"age":25,
"work":{
"title":"Engineer",
"company":"XYZ"
}
}
Run Code Online (Sandbox Code Playgroud)
应用补丁后,它应该是:
{
"name":"ABC",
"age":25,
"work":{
"title":"Senior Engineer",
"company":"XYZ"
}
}
Run Code Online (Sandbox Code Playgroud)
您能帮我找到一种实施方法吗?
根据我的研究,我发现了一个Python模块python-json-patch,它有助于将 json 应用到 json 对象的补丁中。因此,我们需要从 MongoDB 获取 json/document 并使用上述模块应用补丁。然后将文档替换回 MongoDB 中。所以,基本上这会以 PUT 而不是 PATCH 的形式结束。
另一种方法是我认为有一个模块来解析 json 补丁并构建 json 并使用$set将更新应用到 MongoDB将更新应用到 MongoDB 。但这种方法很幼稚而且效率不高。
因此,请建议一种使用 json patch 并直接应用于 MongoDB 文档来实现 HTTP PATCH 的好方法。
替换如下 2 个命令来获取 Kubernetes 秘密令牌的一个线性命令是什么?示例用例将从 kubernetes-dashboard-admin 的密钥中获取令牌以登录和查看 kubernetes-dashboard。
命令示例:
$ kubectl describe serviceaccount default
Name: default
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: default-token-zvxf4
Tokens: default-token-zvxf4
Events: <none>
$ kubectl describe secret default-token-zvxf4
Name: default-token-zvxf4
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: default
kubernetes.io/service-account.uid: 809835e7-2564-439f-82f3-14762688ca80
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 7 bytes
token: TOKENHERE
Run Code Online (Sandbox Code Playgroud) jsonpath kubernetes kubectl kubernetes-dashboard kubernetes-secrets
我有一个示例Json响应,如下所示
\n我知道如何使用==或 等比较操作来过滤它>
\ne.g。我可以使用$.books[?(@.pages > 460)]来检索超过 460 页的书籍,或者
\n类似地$.books[?(@.pages != 352)]检索不超过 352 页的书籍。
\n但是我如何过滤它Json来检索标题包含“Java”子字符串或在 2014 年出版的书籍(实际上也是子字符串)?
\n样本Json为:
{ \n "books": [ \n { \n "isbn": "9781593275846", \n "title": "Eloquent JavaScript, Second Edition", \n "subtitle": "A Modern Introduction to Programming", \n "author": "Marijn Haverbeke", \n "published": "2014-12-14T00:00:00.000Z", \n "publisher": "No Starch Press", \n "pages": 472, \n "description": "JavaScript lies at the heart of almost every modern web …Run Code Online (Sandbox Code Playgroud) Argo CD 显示 linkerd(由 Helm 安装)中的两个项目不同步。preserveUnknownFields: false这些警告是由该部分中的可选选项引起的spec:
Trafficsplits.split.smi-spec.io

serviceprofiles.linkerd.io
但我无法弄清楚如何忽略清单ignoreDifferences中使用的差异Application。json路径/spec/preserveUnknownFields不起作用。是因为左侧版本中不存在字段preserveUnknownFields吗?
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: linkerd
namespace: argocd
spec:
destination:
namespace: linkerd
server: https://kubernetes.default.svc
project: default
source:
chart: linkerd2
repoURL: https://helm.linkerd.io/stable
targetRevision: 2.10.1
syncPolicy:
automated: {}
ignoreDifferences:
- group: apiextensions.k8s.io/v1
name: trafficsplits.split.smi-spec.io
kind: CustomResourceDefinition
jsonPointers:
- /spec/preserveUnknownFields
- group: apiextensions.k8s.io/v1
name: trafficsplits.split.smi-spec.io
kind: CustomResourceDefinition
jsonPointers:
- /spec/preserveUnknownFields
Run Code Online (Sandbox Code Playgroud) 在示例表中:
CREATE TABLE example (
id SERIAL PRIMARY KEY,
data JSON NOT NULL );
INSERT INTO example (id, data) VALUES
(1, '[{"key": "1", "value": "val1"}, {"key": "2", "value": "val2"}]')
, (2, '[{"key": "1", "value": "val1"}]')
, (3, '[{"key": "1", "value": "val1"}, {"key": "2", "value": "val2"}]');
Run Code Online (Sandbox Code Playgroud)
我想查询数据列中 key = 2 的值字段。我当前使用的查询是这样的:
SELECT id,
jsonb_path_query(
TO_JSONB(data),
'$[*] ? (@.key == "2").value'::JSONPATH
)::VARCHAR AS values
FROM example
Run Code Online (Sandbox Code Playgroud)
我期望结果是:
| ID | 价值观 |
|---|---|
| 1 | “值2” |
| 2 | 无效的 |
| 3 | “值2” |
但实际结果是:
| ID | 价值观 |
|---|---|
| 1 | “值2” |
| 3 | “值2” … |
我的一列中有这样的 JSON 数据
{"foo": 1, "bar": 2}
{"foo": 1}
Run Code Online (Sandbox Code Playgroud)
我想运行一个查询,将键作为数组返回
foo,bar
foo
Run Code Online (Sandbox Code Playgroud) 您如何获得对象的所有子节点的JSONPath?
例如:
var data = [{
"key1": {
"children": [{
"key2": "value",
"key3": "value",
"key4": {}
}, {
"key2": "value",
"key3": "value",
"key4": {}
}],
"key5": "value"
}
}, {
"key1": {
"children": {
"key2": "value",
"key3": "value",
"key4": {}
},
"key5": "value"
}
}]
Run Code Online (Sandbox Code Playgroud)
我希望将数据结构中所有节点的绝对路径作为数组:
[
"data[0]['key1']['children'][0]['key2']",
"data[0]['key1']['children'][0]['key3']",
"data[0]['key1']['children'][0]['key4']",
......,
"data[0]['key1']['children'][1]['key2']",
.......,
"data[1]['key1']['children']['key2']",
..........
]
Run Code Online (Sandbox Code Playgroud)
有没有办法在JS中完成这项工作?
我正在尝试将Jsonpath的输出直接映射到POJO列表.我正在使用杰克逊作为地图提供商.
Jsonpath输出:
{
"actions" : [
{
"parameterDefinitions" : [
{
"defaultParameterValue" : {
"name" : "PARAM1",
"value" : ""
},
"description" : "Type String",
"name" : "PARAM1",
"type" : "StringParameterDefinition"
},
{
"defaultParameterValue" : {
"name" : "PARAM3",
"value" : ""
},
"description" : "Type String",
"name" : "PARAM3",
"type" : "StringParameterDefinition"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
JobParameter.java(我要映射的POJO):
public class JobParameter {
private String description;
private String name;
private String type;
// public getters & setters
Run Code Online (Sandbox Code Playgroud)
Jsonpath初始化 …
我找到了用于测试多个值但不提取多个值的jsonpath示例.
我想image和name从kubectl get pods.
这让我受益匪浅 name
kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].name}' | xargs -n 1
这让我受益匪浅 image
kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].image}' | xargs -n 1
但
kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].[name,image}' | xargs -n 2
抱怨invalid array index image- 是否有获取节点相邻值列表的语法?
jsonpath ×10
kubernetes ×3
java ×2
kubectl ×2
sql ×2
argocd ×1
flask ×1
http-patch ×1
jackson ×1
javascript ×1
jayway ×1
jquery ×1
jsonb ×1
jsonpointer ×1
linkerd ×1
mongodb ×1
postgresql ×1
presto ×1
python-3.x ×1
trino ×1