标签: jsonpath

使用“jsonPath”过滤掉包含空数组的元素的表达式

我有一个以下形式的 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属性的元素?

java spring spring-integration jsonpath

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

RestAssured - JsonPath 根据给定的过滤条件从对象数组中过滤匹配对象的属性

我正在使用放心为我的微服务编写集成测试。我有一个像这样的 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

我在这里做错了什么?非常感谢任何帮助。

java json jsonpath rest-assured rest-assured-jsonpath

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

JSON 路径没有值

如何为以下包含字符串和数组组合的 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 对象。

unit-testing spring-mvc mockito jsonpath mockmvc

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

如何检查 Camel 路由中 jsonpath 是否存在密钥?

需要检查下面的 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 apache-camel jsonpath camel-http spring-camel

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

如何使用SelectTokens查询多个字段?

如果我有一个 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运行,但这行得通吗?两个结果数组是否保证保留原始源数据的顺序?有没有一种更简单的方法可以只用一个查询来完成它?

c# json json.net jsonpath

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

NiFi EvaluateJsonPath 数组长度

我有以下 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 网站在线检查时,它似乎有效。

我的表情怎么了?

json jsonpath apache-nifi json-path-expression

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

jsonpath 与 kubectl 获取“app.kuberentes.io/version”值

我需要从我的 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 中运行

powershell jsonpath kubernetes kubectl

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

使用jsonpath进行字符串搜索

我有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)

我想做的是: …

jquery json jsonpath

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

在Java中从JSONPATH获取字符串字段

我目前有以下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(删除字符串的第一个和最后一个字符),因为查看代码有点麻烦?

java jsonpath

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

如何从Oracles JSON CLOB类型的JSON数组中选择特定元素

我有一个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)

oracle json jsonpath oracle12c

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