问题标签 [json-patch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1611 浏览

json - Spring JSON Patch 无法更新嵌套的 Map 对象

在我的应用程序中,我试图支持 JSON 补丁请求以应用部分更新我的实体,并且我直接使用 Spring 在 spring-data-rest 库中提供的 Patch 实现。

我无法使用 Spring Patch 实现部分更新 Java 中的 Maps,或者 Spring 实现不支持此类操作。

Spring Patch 将 JSON 补丁操作转换为 SPEL 操作,并且对于具有固定属性(或字段)的 POJO,一切正常,但它似乎不适用于 Maps,我认为“字段”是 Map 的键。

知道 Spring 在幕后将 JSON 路径转换为 ​​SPEL 操作,我还尝试在我的 PATCH 有效负载中使用 SPEL 表示法,但没有任何结果。这是我尝试过的

让我们假设这是这种情况:

我希望嵌套映射上的替换操作可以通过检查键来工作,但也许我做错了什么,或者我应该简单地用常规字段表示所有对象,如 POJO,以便它工作。

0 投票
1 回答
1217 浏览

rest - 如何为大型集合条目的订单更改实现 RESTful API?

我有一个可能包含大量资源的端点。它们以分页列表的形式返回。每个资源都有一个唯一的id、一个rank字段和一些其他数据。从语义上讲,资源是根据它们的rank. 用户应该能够更改该顺序。我正在寻找一个 RESTful 接口来更改rank大型集合中许多资源中的字段。

重新排序一个资源可能会导致rank许多资源的字段发生变化。例如,考虑将最不重要的资源移动到最重要的位置。许多资源可能需要“降级”。

被分页的集合使问题变得更加棘手。之前也有过类似的问题,关于一个小合集

rank字段是整数类型。如果它产生一个合理的界面,我可以改变它的类型。


例如:

GET /my-resources?limit=3&marker=234返回:

考虑的方法。

1) 对列表的 PATCH 请求。

我们可以使用标准的 json-patch 请求修改排名字段。例如以下:

我用这种方法看到的问题:

patha)在补丁操作中使用数组索引。每个资源已经有一个唯一的 ID。我宁愿用那个。

b)我不确定数组索引在分页集合中应该引用什么?我想一旦所有页面都被接收并背靠背合并,它应该引用全局索引。

c) 集合中资源的索引可能会被其他客户端更改。当前客户在索引 1 处的想法可能不再在该索引处。我想可以先在补丁请求中添加测试操作。所以完整的补丁请求看起来像:

2)使集合成为“字典”/ json 对象并使用字典的补丁请求。

这种方法相对于 1) 的优点是我们可以path在补丁操作中使用唯一 ID。返回资源中的“数据”不再是列表:

然后我可以在补丁操作中使用唯一 ID。例如:

我用这种方法看到的问题:

a) my-resources 集合可能很大,我很难理解分页 json 对象或分页字典的含义。我不确定是否可以在这个大对象上定义迭代顺序。

3) 有一个单独的端点来使用 PUT 修改排名

我们可以像这样添加一个新端点PUT /my-resource-ranks。并期望在 PUT 请求中传递有序 id 的完整列表。例如

我们将创建MyResource.rank一个只读字段,因此它不能通过其他端点进行修改。

我用这种方法看到的问题:

a) 需要发送完整的有序列表。在 PUT 请求中,/my-resource-ranks我们不会包含任何其他数据,而只会包含资源的唯一 ID。它没有发送完整资源那么严重,但完整的有序列表仍然可能很大。

4)避免MyResource.rank字段和“排名”是 /my-collections 响应中的顺序。

返回的资源中不会包含“rank”字段,并且它们已经根据它们在响应中的排名进行了排序。

用户可以通过json-patch 中 的移动操作更改排序。

我用这种方法看到的问题:

/my-collectionsa)从客户端的角度来看,我希望服务器可以自由地以“任意”顺序返回。只要顺序一致,“更简单”的服务器实现的最佳顺序可能与应用程序定义的等级不同。

b) 与 1)b) 相同的问题。一旦所有页面都被接收并背靠背合并,补丁操作中的索引是否引用全局索引?还是指当前页面中的索引?


更新:

有人知道现有公共 API 的更多示例吗?寻找进一步的灵感。到目前为止,我有:

0 投票
1 回答
1983 浏览

c# - JsonPatchDocument 到一个复杂的实体框架跟踪对象

我正在尝试使用 Json 补丁来更新存储在实体框架数据上下文中的实体。

我有这样的实体类 -

要将补丁应用于Customer对象,我从数据上下文中查询源,然后应用补丁,如下所示 -

其中patch包括 -

这适用于源对象的简单更新,当我想修补链接实体时会出现问题,请考虑以下补丁

我面临的第一个问题是——

未找到路径段“0”指定的目标位置

我发现解决此问题的唯一方法是将更改从上下文中查询实体的方式称为 -

这不太理想,因为我不喜欢查询数据来更新它的想法。我想知道是否有更清洁的方法。

0 投票
1 回答
1898 浏览

graphql - 带有 JSON 补丁的 GraphQL 突变

GraphQL 中是否有任何数据类型可用于描述 JSON Patch 操作?

JSON Patch 操作的结构如下。

wherevalue可以是任何有效的 JSON 文字或对象,例如。

op并且path总是简单的字符串,value可以是任何东西。

0 投票
0 回答
517 浏览

c# - JsonPatchDocument applyTo() 没有使用所有属性,为什么?

当我在 JsonPatchDocument 上调用 applyTo() 然后保存更改时,EF 运行的查询仅使用 recordId、coworkerId 和 startDate 进行更新。它没有使用 IsActive 字段/列!为什么会这样,如果没有这种情况,我会得到 DbUpdateConcurrencyException,因为行数现在超过 1。

应用补丁更改时运行的查询是

设置无计数;更新 [Records_Coworkers] SET [StartDate] = @p0 其中 [RecordID] = @p1 AND [CoworkerID] = @p2 AND [StartDate] 为 NULL;选择@@行计数;

这是模型

有没有办法配置不同的东西,以便在补丁中使用“IsActive”属性?

我的 axios 调用看起来像这样

0 投票
3 回答
1557 浏览

api - FluentValidator 和 JsonPatchDocument

我有 WebAPI (.NET Core) 并使用 FluentValidator 来验证模型,包括更新。我使用 PATCH 动词并具有以下方法:

另外,我有一个验证器类:

并在 Startup 类中映射此验证器:

但它不起作用。如何为我的任务编写有效的 FluentValidator?

0 投票
0 回答
2087 浏览

kubernetes - 在 kustomize 中重用 JSON 补丁

我在我的覆盖 kustomization 文件中使用 JSON 补丁,以便设置要用于我的 pod 的图像。

补丁本身非常通用:

在我的kustomization.yml

通过使用这种方法,我必须为使用不同映像的每个部署使用不同的补丁。有没有办法将补丁value字段移动到kustomization.yml文件中,我可以在其中执行以下操作:

0 投票
1 回答
778 浏览

c# - 如何将 IObjectAdapter 与 JsonPatch 一起使用?

我试图阻止 DTO 的某些属性在调用patch.ApplyTo(object, adapter). 我目前的计划是将自定义属性放在要忽略的属性上,并且使用该适配器,仅当该操作中使用的路径不包含应忽略的属性名称时才允许操作通过。例如。

也许这是一个愚蠢的问题,但我找不到有关如何进行实际添加部分的任何信息。事实上,我根本找不到任何关于这个(IObjectAdapter)应该如何与 JsonPatch 一起使用的参考资料,除了有一个重载来传递一个适配器。

有什么方法可以调用任何给定操作的默认实现吗?operation.Apply()存在,但它需要一个适配器作为其第二个参数——JsonPatch 的“默认适配器”是什么?还是有更好的/内置的方法来完全解决这个问题?

0 投票
1 回答
861 浏览

resttemplate - patchForObject 怎么做?

我想通过 Spring RestTemplate 发送一个 HTTP PATCH 请求,其中包含由以下对象表示的操作数组:

考虑以下代码:

是否可以按如下方式使用 restTemplate 进行请求?

0 投票
1 回答
151 浏览

json - 将 JSON-Patch 转换为 MarkLogic JSON 补丁规范?

MarkLogic PATCH API 使用的JSON 补丁规范与 JSON-Path 标准 ( RFC 6902 )非常相似,但并不完全相同。例如,要将节点添加到以下文档:

MarkLogic 补丁:

JSON补丁标准:

有没有办法自动将 JSON-Patch 翻译成 MarkLogic Patch?我的想法是利用库,例如json-patch-gen​​自动生成 JSON-Patch 操作并将它们转换为 MarkLogic 补丁来更新 MarkLogic 中的文档。

或者,是否有一个 JavaScript 库可用于通过区分两个 JavaScript 对象来自动生成 MarkLogic 补丁?