我希望我的控制器操作能够处理来自jquery的jsonp请求$.getJSON.在我的控制器操作中,我有以下respond_to块:
respond_to do |format|
format.html { render json: {:items_by_tag => @tagged_item_list}}
if params[:callback]
format.js { render :json => {:items_by_tag => @tagged_item_list}.to_json, :callback => params[:callback] }
else
format.json { render json: {:items_by_tag => @tagged_item_list}}
end
end
Run Code Online (Sandbox Code Playgroud)
但是SyntaxError:invalid label当我打电话给网址时,我正在收到$.getJSON.我的网址是形式的http://myservice.com?param1=a¶m2=b&callback=?.
我的代码导致jsonp失败的问题是什么?
鉴于以下Json输入:
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
Run Code Online (Sandbox Code Playgroud)
如果作者匹配例如给定名称,我需要选择作者字段.Evelyn Waugh.我正在努力为此编写JsonPath表达式.我尝试了以下但没有成功.谁能建议正确的表达方式?
$.author?(@ == 'Evelyn Waugh')
$.?(@.author == 'Evelyn Waugh')
$..?(@.author == 'Evelyn Waugh')
Run Code Online (Sandbox Code Playgroud) 我有JSON数据,看起来像这样
{ "会话ID":7242750700467747000}
该号码先前从服务器响应中获取,并在服务器端生成为Java Long.客户端认为自己认为这是sessionID并发送请求.问题是,当客户端的请求到达我不得不再次解析这个值long类型的服务器.我使用JsonPath,具体来说:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>0.8.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我像这样解析JSON数据时
long sessionID = JsonPath.read(json,"$ .sessionID");
我得到一个例外:
java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Long
因此看起来这个数字是由JsonPath解析为Integer的.这肯定会导致错误的结果,因为Integer小于Long.在JsonPath中有什么办法可以解析并将数据作为Long返回吗?
鉴于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)
表达的任何复杂程度都是可以接受的.
对于上下文,我想提供一个带路径/值对的测试套件,这对于值很有用,但是我不能用这个模式断言数组大小.
我写了Spring控制器Junits。我使用JsonPath使用来从JSON获取所有ID ["$..id"]。
我有以下作为测试方法:
mockMvc.perform(get(baseURL + "/{Id}/info", ID).session(session))
.andExpect(status().isOk()) // Success
.andExpect(jsonPath("$..id").isArray()) // Success
.andExpect(jsonPath("$..id", Matchers.arrayContainingInAnyOrder(ar))) // Failed
.andExpect(jsonPath("$", Matchers.hasSize(ar.size()))); // Success
Run Code Online (Sandbox Code Playgroud)
以下是我传递的数据:-
List<String> ar = new ArrayList<String>();
ar.add("ID1");
ar.add("ID2");
ar.add("ID3");
ar.add("ID4");
ar.add("ID5");
Run Code Online (Sandbox Code Playgroud)
我收到以下失败消息:
Expected: [<[ID1,ID2,ID3,ID4,ID5]>] in any order
but: was a net.minidev.json.JSONArray (<["ID1","ID2","ID3","ID4","ID5"]>)
Run Code Online (Sandbox Code Playgroud)
问题是:如何使用JSONArray进行处理?org.hamcrest.Matchers;有没有使用JSONPath的简单方法。
设置: - ,,hamcrest-all-1.3 jarjson-path-0.9.0.jarspring-test-4.0.9.jar
我有一个像bellow的json数组:
{
"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,
"likes": 1
},
{
"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
}
},
"expensive": 10}
Run Code Online (Sandbox Code Playgroud)
我试图找到没有 …
有一个返回一个非常基本的json响应的服务:
{
"methodresult": "error",
"ErrorCode": 2,
"ErrorCodeText": "format",
"ErrorMessage": "Json parse exception at pos:171 msg:Expecting \"key\""
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用JSONPath来查询"methodresult"值是否返回"错误".
基于我见过的文档/示例,我希望这可以工作:
$[?(@.methodresult=="error")]
Run Code Online (Sandbox Code Playgroud)
但是基于我正在使用的验证器(https://jsonpath.curiousconcept.com/)我没有看到任何布尔响应.
当试图用一个不在数组中的东西写一个表达式时,我有什么东西不见了?
我在 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) jsonpath ×10
json ×4
java ×3
arrays ×1
aws-lambda ×1
cross-domain ×1
customcolumn ×1
filter ×1
groovy ×1
hamcrest ×1
javascript ×1
jquery ×1
junit ×1
kubectl ×1
kubernetes ×1
size ×1
spock ×1
spring-test ×1
types ×1