我正在尝试使用JsonPath for .NET(http://code.google.com/p/jsonpath/downloads/list),我无法找到如何解析Json字符串和JsonPath字符串的示例得到一个结果.
有没有人用过这个?
我有一个类似以下的json:
{
"d": {
"results": [
{
"__metadata": {
},
"prop1": "value1",
"prop2": "value2",
"__some": "value"
},
{
"__metadata": {
},
"prop3": "value1",
"prop4": "value2",
"__some": "value"
},
]
}
}
Run Code Online (Sandbox Code Playgroud)
我只想将这个JSON转换为不同的JSON.我想从JSON中删除" _ metadata"和" _some"节点.我正在使用JSON.NET.
我有这个JSON代码:
{
"A": {
"AB": [{
"ABA": "0",
"ABB": "1",
"ABC": "2"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
我需要使用一个JSONPath表达式,该表达式返回仅具有ABA和ABC属性的JSON.就像是:
{
"A": {
"AB": [{
"ABA": "0",
"ABC": "2"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我设法提取一个或所有属性.例如
$.A.AB[*]
Run Code Online (Sandbox Code Playgroud)
要么
$.A.AB[*].ABA
Run Code Online (Sandbox Code Playgroud)
有没有办法只提取两个?
谢谢
我使用的NodeJS与jsonpath.我有这个json结构:
{
things:{
books: [
{name: "book1"},
{name: "book2"},
{name: "book3"},
{name: "book4"},
],
movies: [
{name: "movie1"},
{name: "movie2"},
{name: "movie3"},
{name: "movie4"},
]
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道jsonpath表达式返回一个带有things对象键名的数组.那将是:
["books","movies"]
Run Code Online (Sandbox Code Playgroud)
现在,我这样做:
Object.keys(jsonpath.eval(jsonStructure,"$.things").pop());
Run Code Online (Sandbox Code Playgroud)
但我发现它并不优雅......当我只需要键名时,我不需要复制整个结构.
我很难弄清楚如何在spring mvc中的JSON文档响应中使用jsonPath断言.也许有比使用jsonPath更好的方法来完成这个特定的场景.我想验证链接数组是否具有"self"的rel项,而"self"对象的"href"属性也具有等于"/"的"href"属性.JSON响应如下所示:
{
"links":[
{
"rel":[
"self"
],
"href":"/"
},
{
"rel":[
"next"
],
"href":"/1"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我试过这个,我可以看到它有rel [0]有自己,但我宁愿不依赖于链接数组中的位置和自我的rel数组,并实际测试链接中的href是什么[rel] [self]是"/".有任何想法吗?
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(welcomeController).build();
}
@Test
public void givenRootUrl_thenReturnLinkToSelf() throws Exception {
mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(jsonPath("$.links[0].rel[0].", is("self")));
}
Run Code Online (Sandbox Code Playgroud) 我想为传递给步进函数的参数设置一个默认值
例如,
"Parameters": {
"foo.$": "$.foo" OR "bar" if "$.foo" not specified
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用 JSONPath 本地做到这一点,还是我必须使用选择+传递状态?
如果在输入中未指定参数时有一种方法不会中断,我什至会选择使用选择/通过。
如果我不包含"foo": ""在输入中,我会收到类似的错误"JSONPath ... could not be found in the input."
我开始使用Lens并注意到,当节点内的 Pod 的限制高于实际容量时,它会向您发出一些警告。

所以我尝试使用kubectl获取此信息,但我是jsonpath的新手,我只是设法使用如下内容获取原始信息:
kubectl get pods -o=jsonpath='{.items..resources.limits}' -A
Run Code Online (Sandbox Code Playgroud)
这会产生这样的结果:
{"cpu":"200m","memory":"1Gi"} {"cpu":"200m","memory":"1Gi"} {"cpu":"200m","memory":"512Mi"} {"cpu":"500m","memory":"250Mi"} {"memory":"170Mi"} {"memory":"170Mi"} {"cpu":"2","memory":"2Gi"} {"cpu":"2","memory":"2Gi"} {"cpu":"2","memory":"2Gi"} {"cpu":"1","memory":"1Gi"} {"cpu":"1","memory":"1Gi"} {"cpu":"2","memory":"2Gi"} {"cpu":"100m","memory":"128Mi"} {"cpu":"100m","memory":"128Mi"} {"cpu":"500m","memory":"600Mi"} {"cpu":"1","memory":"1Gi"} {"cpu":"100m","memory":"25Mi"} {"cpu":"100m","memory":"25Mi"}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,如何总结所有这些值?这些值是否准确,或者我是否遗漏了任何其他查询?我已经使用 LimitRange 检查过,得到的值似乎是正确的,结果包括 LimitRange 配置设置的限制。
由于与我正在处理的项目相关的原因,我希望将JSON文件的整个查询保存为字符串,例如,$.store.book[*].title(而不是必须将文档的每个级别临时存储为单独的对象) .
我目前正在使用JsonPath(版本0.8.0,这是我能找到的最新版本),这基本上正是我正在寻找的,但我得到的例外情况如下所示.我只是使用JsonPath谷歌代码页上给出的示例JSON,使用他们的一个示例查询.
我在这做错了什么?或者,如果没有解决方案,Java中是否有JsonPath的替代方案?我希望能够将整个查询作为字符串传递,并且它必须是Java.
功能:
public void testJsonPath() throws Exception
{
String query = "$.store.book[*].title";
List toRet = (List) JsonPath.read(practiceJson, query, new Filter[0]);
System.out.println(toRet.toString());
}
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.NoClassDefFoundError: net/minidev/json/parser/ParseException
at com.jayway.jsonpath.spi.JsonProviderFactory$1.create(JsonProviderFactory.java:27)
at com.jayway.jsonpath.spi.JsonProviderFactory.createProvider(JsonProviderFactory.java:32)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:202)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:307)
at net.windward.datasource.test.TestJsonDataSource.testJsonPath(TestJsonDataSource.java:119)
Run Code Online (Sandbox Code Playgroud)
练习JSON:
private String practiceJson = "{\n" +
" \"store\": {\n" +
" \"book\": [ {\n" +
" \"category\": \"reference\",\n" +
" \"author\": \"Nigel Rees\",\n" +
" \"title\": \"Sayings of the Century\",\n" +
" \"price\": 8.95\n" +
" }, {\n" + …Run Code Online (Sandbox Code Playgroud) 我正在使用最新的(0.117)Presto并试图用这样复杂的JSON数组执行CROSS JOIN UNNEST.
[{"id": 1, "value":"xxx"}, {"id":2, "value":"yy"}, ...]
Run Code Online (Sandbox Code Playgroud)
为此,首先我尝试使用id by 的值创建一个ARRAY
SELECT CAST(JSON_EXTRACT('[{"id": 1, "value":"xxx"}, {"id":2, "value":"yy"}]', '$..id') AS ARRAY<BIGINT>)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
提取id值的最佳JSON路径是什么?
MvcResult result = this.mockMvc.perform(
MockMvcRequestBuilders.get(mockUrl))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType("application/ json;charset=UTF-8"))
.andDo(MockMvcResultHandlers.print())
Run Code Online (Sandbox Code Playgroud)
给我以下内容:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Type=[application/json;charset=UTF-8]}
Content type = application/json;charset=UTF-8
Body = {"version":"0.1"}
Forwarded URL = null
Redirected URL = null
Cookies = []
Run Code Online (Sandbox Code Playgroud)
但是,测试它
MvcResult result = this.mockMvc.perform(
MockMvcRequestBuilders.get(mockUrl))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType("application/ json;charset=UTF-8"))
.andExpect(jsonPath("$.version").value("0.1"))
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
java.lang.AssertionError: No value at JSON path "$.version", exception: net/minidev/json/writer/JsonReaderI
at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:245)
at org.springframework.test.util.JsonPathExpectationsHelper.assertValue(JsonPathExpectationsHelper.java:99)
at org.springframework.test.web.servlet.result.JsonPathResultMatchers$2.match(JsonPathResultMatchers.java:99)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
at com.vmware.skyscraper.rts.runbooks.RunbookControllerTest.testGetSingleRunbook(RunbookControllerTest.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) …Run Code Online (Sandbox Code Playgroud) jsonpath ×10
json ×3
c# ×2
java ×2
json.net ×1
junit ×1
kubectl ×1
kubernetes ×1
mockito ×1
mockmvc ×1
node.js ×1
presto ×1
spring-mvc ×1
unit-testing ×1