我有一个以下形式的 JSON 有效负载:
[
{"id": 1, "list": [1], "name":"one"},
{"id": 2, "list": [1,2], "name":"two"},
{"id": 3, "list": [], "name":"three"}
]
Run Code Online (Sandbox Code Playgroud)
我想从包含空属性的数组中过滤掉元素"list"。换句话说,我想丢弃该元素并id=3仅处理上面示例中的第一个和第二个元素。
目前,我的过滤器如下所示:
<!-- ne == not equals -->
<int:filter id="filter"
input-channel="in"
output-channel="out"
expression="#jsonPath(payload, '$[*].list') ne '[]'"
discard-channel="consoleOutputChannel" />
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我应该如何向 my 表明expression我想要排除具有空list属性的元素?
我正在使用放心为我的微服务编写集成测试。我有一个像这样的 Json 有效负载,它是从它返回的。
{
"sessionQuestions":[
{
"id":1272,
"sessionId":1146,
"questionId":"1002",
},
{
"id":1273,
"sessionId":1146,
"questionId":"1004",
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要根据 QuestionId 值查找会话问题的 id。然后我需要在我的断言中比较它们。给定 QuestionId 值,我很难从 sessionQuestion 中获取 id。我正在使用 JsonPath 来完成这件事。这是我的 Json 路径表达式。
new JsonPath(response).get("$.sessionQuestions[?(@.questionId=='1002')].id");
Run Code Online (Sandbox Code Playgroud)
这会引发错误。
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: expecting EOF, found '[' @ line 1, column 45.
nRootObject.$.sessionQuestions[?(@.quest
^
1 error
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Run Code Online (Sandbox Code Playgroud)
我在此在线评估器中尝试了相同的 Json 路径表达式,效果很好。我在用json-path-2.9.0.jar
我在这里做错了什么?非常感谢任何帮助。
如何为以下包含字符串和数组组合的 JSON 编写模拟MVC 测试。
{
"id":1,
"firstName":"NPA",
"lastName":"TAS",
"mobile":"123454321",
"email":"ABCD@GMAIL.COM",
"accounts":[
{
"id":1,
"balance":"$1000",
"custid":"1",
"accNbr":"12345"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的代码:
@Test
public void testJson() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(get("/acc/1")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.accounts.id", Matchers.is(1)))
.andExpect(jsonPath("$.accounts.balance", Matchers.is("$1000")))
.andExpect(jsonPath("$.accounts.accNbr", Matchers.is("12345")))
.andExpect(jsonPath("$.accounts.custid", Matchers.is("1")))
.andExpect(jsonPath("$.*", Matchers.hasSize(4)));
}
Run Code Online (Sandbox Code Playgroud)
我得到了例外
JSON 路径“$.accounts.id”没有值,异常:
预期在路径 $ 中找到具有属性 ['accounts'] 的对象,但发现了 'net.minidev.json.JSONArray'。根据 JsonProvider:'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider',这不是 json 对象。
但是,如果我尝试使用 $.accounts[0].id 我会得到异常
JSON 路径“$.accounts[0].id”没有值,异常:
预期在路径 $ 中找到具有属性 ['accounts'] 的对象,但发现了 'net.minidev.json.JSONArray'。根据 JsonProvider:'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider',这不是 json 对象。
需要检查下面的 JSON 对象是否存在密钥。如果键存在且值为空,那么我想将其设置TH为默认语言。
在骆驼路线中如何做到这一点?
{ "languagePreference":"" }
Run Code Online (Sandbox Code Playgroud)
//set default value of language preference as TH
.setHeader("languagePreference").jsonpath("$.languagePreference")
Run Code Online (Sandbox Code Playgroud) 如果我有一个 JSON 数组,并且想从每个对象中提取一个字段,那么这相当简单:
Data:
{
"Values": [
{
"Name": "Bill",
"Age": "25",
"Address": "1234 Easy St."
},
{
"Name": "Bob",
"Age": "28",
"Address": "1600 Pennsylvania Ave."
},
{
"Name": "Joe",
"Age": "31",
"Address": "653 28th St NW"
}
]
}
Query:
data.SelectTokens("Values[*].Name")
Run Code Online (Sandbox Code Playgroud)
这将为我提供所有名称的数组。但如果我想要多个字段怎么办?有没有办法获取包含名称和地址的对象数组?
最明显的方法是运行SelectTokens两次然后再Zip运行,但这行得通吗?两个结果数组是否保证保留原始源数据的顺序?有没有一种更简单的方法可以只用一个查询来完成它?
我有以下 JSON:
{
"hits": {
"hits":[]
}
}
Run Code Online (Sandbox Code Playgroud)
(ElasticSearch 的一些回应)。
我想使用处理器EvaluateJsonPath来获取 的长度hits.hits。
我尝试了以下表达式:
$.hits.hits.length
但我收到以下错误:
FlowFile could not find path $['hits']['hits']['length'] for attribute key hits.:(这是错误的结束)。
然而,当使用 JsonEvaluate 网站在线检查时,它似乎有效。
我的表情怎么了?
我需要从我的 Pod 获取metadata->labels->app.kubernetes.io/version 值。但我似乎找不到jsonpath允许标签键具有斜杠和句点的方法。
我有一个正在运行的基本命令: kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{end}" -A。这成功返回每个 Pod 的名称。
我已经修改了这个以尝试获取版本。以下是我尝试过的排列(每个排列都失败了):
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.labels.app.kubernetes.io/version}{end}" -A
Run Code Online (Sandbox Code Playgroud)
和
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.labels.'app.kubernetes.io/version'}{end}" -A
Run Code Online (Sandbox Code Playgroud)
和
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.labels.`"app.kubernetes.io`/version`"}{end}" -A
Run Code Online (Sandbox Code Playgroud)
我如何获取使用的版本jsonpath?
如果这很重要的话,我正在 Windows PowerShell 中运行
我有20000个对象的巨大JSON文件。我想查询此json文件中的字符串。但是,使用jsonpath,我只能找到完全匹配的内容吗?
假设我的档案如下:
{ "store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是: …
我目前有以下JSON:
{"content":
[{"uuid":"123132",
"firstname" : "Jon",
"lastname" : "Deer"
...
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用Java来获取"uuid"的字符串值.以下是我的代码:
JSONPATH jsonPath = new JSONPATH(json);
String myString = jsonPath.getString("content.uuid");
System.out.println(myString);
Run Code Online (Sandbox Code Playgroud)
结果字符串:[123132]预期的字符串:123132
有没有另一种方法可以使用JSONPATH获得预期的结果而不使用substring(删除字符串的第一个和最后一个字符),因为查看代码有点麻烦?
我有一个CLOB列,其中包含以下数据(为了解决此问题而简化)
{
"notUsed": [],
"stock": [
{
"name": "eggs",
"value": "in stock"
},
{
"name": "milk",
"value": "out of stock"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想避免必须选择整个对象并以编程方式解析以获取我想要的数据.理想情况下,我想利用Oracle JSON路径功能来实现这一目标.
我想得到"value",在哪里"name" = "eggs"
我试过以下,但得到了一个[99999][40442] ORA-40442: JSON path expression syntax error.我已通过评估程序运行上面的示例JSON和JSON路径,并返回所需的结果,这让我觉得Oracle拥有自己的JSONPath解释
SELECT
json_query(
'{"notUsed":[],"stock":[{"name":"eggs","value":"in stock"}, {"name":"milk","value":"out of stock"}]}',
'$.stock[?(@.name=="eggs")]' )
FROM dual;
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用Dot Notation,但是还没有找到一个例子,它涵盖了将where子句添加到数组的属性中.
select
myTable.id,
myTable.JSON_COLUMN.stock -- how to get array element here?
from MY_TABLE myTable
where j.id = 46
Run Code Online (Sandbox Code Playgroud)
版:
SELECT * FROM …Run Code Online (Sandbox Code Playgroud) jsonpath ×10
json ×6
java ×3
apache-camel ×1
apache-nifi ×1
c# ×1
camel-http ×1
jquery ×1
json.net ×1
kubectl ×1
kubernetes ×1
mockito ×1
mockmvc ×1
oracle ×1
oracle12c ×1
powershell ×1
rest-assured ×1
spring ×1
spring-camel ×1
spring-mvc ×1
unit-testing ×1