问题标签 [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 回答
8223 浏览

java - 修改 Spring Data Rest 中的 @OneToMany 实体而不使用其存储库

在我的项目中,我使用 A 类型的对象,它与 B 类型对象具有 OneToMany 关系(orphanRemoval = true,cascade = CascadeType.ALL,fetch = FetchType.EAGER)。我需要 SpringDataRest (SDR)使用单个 POST 请求来存储完整的 A对象及其B对象(子对象)。我在 SDR 中尝试了几种组合,唯一对我有用的是为对象A创建 @RepositoryRestResource 并为对象B创建 @RepositoryRestResource ,但将此(B)标记为 exports=false (如果我没有创建存储库完全没有对象B,它不起作用->只是A对象将存储在单个 POST 请求中,而不是其B类型的子项(@OneToMany 关系) ;如果为B存储库省略了exported=false,则会出现相同的结果)。这可以吗,并且是实现它的唯一方法(一次存储所有对象的单个 POST 请求)?

我问的原因是,在我之前的示例中,我必须(我想)通过使用A的存储库来控制所有对象的“生命周期”。我可以接受,因为A -> B关系是组合(B在A之外不存在)。但是我有一个严重的问题,即通过 SDR 使用其父存储库编辑(也删除)一个特定类型的B对象(因为对象B没有导出自己的存储库)。也许,这在定义上是不可能的。我尝试了这些解决方案:

  • “/A/1/B/2”的补丁不起作用->方法不允许(在标题中是“允许:GET,DELETE”)->所以,PUT也是没有问题的
  • Json Patch 也不起作用 - PATCH for "/A/1" using json patch content-type [{"op": "add", "path": "/B/2", ....}] -> “目标数组中没有这样的索引” - 因为 Json Patch 在“数组”之后使用标量“2”作为其数组的索引。这在 Java 世界中是不切实际的,当关系保存在对象集中时 - 索引根本没有意义。
  • 我可以导出对象B的存储库 (exported=true) 以“直接”操作它,但这样我将失去在一个 POST 请求中存储整个对象A及其B对象的能力,正如我之前提到的。

如果可能的话,我想避免发送整个A对象并对其B对象进行一个微小的修改以进行 PUT。谢谢你。

0 投票
1 回答
169 浏览

c# - c# json强制补丁

假设有一个空的 JSON 对象:

有没有办法修补更新它并使用 C# 强制创建丢失的路径?所以在这样的补丁之后:

结果将是:{ a: { b: "foo" } }

0 投票
0 回答
1293 浏览

java - 无法从 FIELD_NAME 令牌中反序列化 java.util.ArrayList 的实例

我见过其他人有同样的错误,但它是由其他原因引起的,所以没有任何回应对我有帮助。我有一个名为 Diff 的类:

我需要将此应用于 Json 对象。在处理这个问题时,我在 Diff 上使用以下命令:

这将返回一个 ObjectNode,其中包含:

我想把它变成一个将应用于 JsonNode 的 JsonPatch。要获取 JsonPatch,我使用以下内容:

但是,这将引发以下异常:

知道为什么会这样吗?甚至没有涉及 ArrayList(据我所知)

0 投票
1 回答
745 浏览

mongodb - 使用 JSON 补丁验证 Mongoose 数组更新

我目前正在构建一个 API,它使用 JSON 补丁规范使用 Mongoose ORM 对 MongoDB 进行部分更新。

我正在使用节点模块mongoose-json-patch将补丁应用于我的文档,如下所示:

当我尝试使用 JSON 补丁语法删除或替换数组元素时,会出现主要问题:

这应该用新值(“Working”)替换数组中的第一项(“Walking”),但是我不知道如何验证实际被替换的内容。如果在应用补丁之前删除了另一个请求 /interests/0,则“Eating”将被“Working”代替,而不是“Walking”,后者将不再存在于数组中。

我想确定如果客户认为他正在编辑“Walking”,那么他要么成功地编辑它,要么至少得到一个错误。

0 投票
1 回答
18913 浏览

asp.net-core - 将 .Net Core Web API 与 JsonPatchDocument 一起使用

我用来更新我的实体,如果看起来像下面这样JsonPatchDocument,这很好用JSON

当我创建对象时,它会使用Operations节点将其转换

如果 JSON 对象看起来像 Patch 不起作用。我相信我需要使用它来转换它

这应该解决了,问题是我使用的是 .net 核心,所以不能 100% 确定在哪里添加JsonPatchFormatter

0 投票
2 回答
4400 浏览

json - 如何在 Angular 2 应用程序中使用 fast-json-patch?

我想在 Angular 2 应用程序中使用“fast-json-patch”库( https://github.com/Starcounter-Jack/JSON-Patch )。

我试过添加:

'fast-json-patch': 'vendor/fast-json-patch/dist/json-patch-duplex.min.js'

在下的system-config.ts文件中,map但导入时不起作用fast-json-patch

0 投票
2 回答
1672 浏览

json - HTTP ReST:更新大型集合:比 JSON PATCH 更好的方法?

我正在设计一个 Web 服务来定期接收列表更新。此时,列表仍然可以建模为单个实体 ( /lists/myList) 或具有许多资源的实际集合 ( /lists/myList/entries/<ID>)。列表很大(数百万个条目),更新很小(通常少于 10 次更改)。

客户端将获取要分发的 Web 服务 URL 和列表,例如:

然后它将按配置推送列表和更新。Web 服务 URL 后面是否有一些数据库很可能但尚未确定。

我一直在研究,似乎使用 JSON 补丁格式的 HTTP PATCH 是最好的方法。

背景和示例:每个列表都有一个识别名称、一个优先级和数百万个条目。每个条目都有一个 ID(由客户端确定)和几个可选属性。创建具有优先级 1 和两个列表条目的列表“requiredItems”的示例:

对于更新,客户端首先需要知道列表现在在服务器上的样子。为此,我将向列表实体添加一个属性“修订”。

然后,我会查询这个属性:

然后客户端会看到服务器上的版本和客户端已知的最新版本之间需要更改的内容,并编写一个 JSON 补丁。例子:

问题:

  • 由于不经常使用的 HTTP 动词 PATCH,这种方法的缺点是客户端支持略少。在不牺牲 HTTP 兼容性(幂等性等)的情况下,是否有更兼容的方法?
  • 将单个列表条目建模为单独的资源并使用PUTand DELETE(可能与ETagand/or If-Match)似乎是一种选择(PUT /lists/requiredItems/entries/3, DELETE /lists/requiredItems/entries/1 PUT /lists/requiredItems/revision),但是当网络落在更新链的中间时,我如何确保应用所有这些操作?HTTP PATCH 是否允许在多个资源上工作?
  • 有没有更好的方法来“版本”列表,也许隐含地也改进了它们的更新方式?请注意,客户端确定修订号。
  • 用 查询修订号是否正确GET /lists/requiredItems?property=revision?它应该是一个单独的资源/lists/requiredItems/revision吗?如果它应该是一个单独的资源,我将如何自动更新它(即列表和修订都更新或都没有更新)?
  • 它可以在 JSON 补丁中首先测试修订值3,然后将其更新到10同一个补丁中吗?
0 投票
4 回答
10497 浏览

c# - 使用 DTO 时的 PATCH

我正在研究 asp.net core webAPi 和 EF core,并希望实现“更新”操作(部分编辑实体)。我搜索了处理该问题的正确方法,发现我应该使用 jsonPatch。问题是我通过我的 API 只公开 DTO,如果我使用 jsonPatch 如下:

然后我需要在 DTO 上应用补丁,并且我不能将它应用到模型实体上,而无需创建新实体。

我还阅读了有关 Odata.Delta 的信息,但它仍然无法在 asp.net 核心上运行,此外 - 我认为它没有用于使用 dto 的内置解决方案(我发现这个示例可以帮助核心的 Odata 将能得到的)

所以,现在 - 我应该使用 POST 并在查询中发送带有更改属性列表的 DTO(正如我在这里看到的),还是 - 有更优雅的解决方案?

谢谢!

0 投票
0 回答
967 浏览

c# - Asp.Net Core JsonPatchDocument:如何检查服务器端的操作?

我只是从带有JsonPatchDocument<TModel>的 Asp.NET 核心中的 PATCH 请求开始。

此类具有很酷的功能,我可以添加以下操作:

现在,我可以将它发送到我的 Asp.Net 服务,并将一个很好的JsonPatchDocument<TModel>反序列化到我的控制器方法中。

但我想验证一下,例如,“AnotherStringValue”满足某个正则表达式。

无论如何我可以找到与某个成员表达式相关的所有操作,例如patchDoc.FindOperationsFor(i=>i.AnotherProperty)?或者有没有办法将成员表达式转换为路径字符串?

0 投票
1 回答
4248 浏览

asp.net-core - JsonPatchDocument 未正确绑定

我正在尝试在 ASP.NET Core 中使用JsonPatch来处理模型的部分更新,但是在将 PATCH 发送到 Web API 控制器操作时遇到绑定问题:

我正在使用一个小型库来发出 PATCH 请求:

这是原始请求:

我的视图模型:

最后,Web API 操作:

我发现这patch是通过 as NULL,表明绑定存在问题。为了检查请求没有问题,我添加了viewModel并发现它正确绑定 - 填充UpdateCharacterViewModel可用于操作。

我在这里做错了什么?