问题标签 [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 投票
2 回答
2278 浏览

spring - Spring Data Rest - PATCH Postgres jsonb 字段

简短的版本是:如何jsonb使用 Spring Data Rest PATCH 方法修补 Postgres 字段中包含的 JSON 对象?

长版来了,请考虑以下实体:

jsonobject属于 Postgres 类型jsonb这些 getter/setter 是这里提到的 Spring Data Rest 的序列化/反序列化方法。如这些答案中所述,我们还尝试为该字段提供自己的类型。

我们的目标是使用 Spring Data Rest 修补此字段包含的 JSON 对象。

例如:

预期输出:

电流输出:

Spring Data Rest 修补 Example 资源并覆盖每个请求属性的值,而不是尝试挖掘 JSON 对象的属性以仅修补请求的嵌套属性。

这是我们认为 Spring Data Rest 支持application/merge-patch+jsonapplication/json-patch+json媒体类型会派上用场的时候。以下是每种媒体类型的输出:

application/merge-patch+json

输出:

application/json-patch+json

输出:

这归结为相同的想法:仅查找实体属性,并且完全覆盖或未找到。

问题如下:有没有办法让 Spring Data Rest 理解它正在处理一个jsonb字段,因此寻找 JSON 嵌套属性而不是只查找实体属性?

注意:@Embeddable/@Embedded最有可能避免使用注释,因为它们意味着知道嵌套的属性名称,这会降低对jsonb字段的兴趣。

感谢您的阅读。

0 投票
1 回答
2545 浏览

rest - Kubernetes 战略合并补丁

嗨,我正在关注此文档https://github.com/kubernetes/kubernetes/blob/master/docs/devel/api-conventions.md#strategic-merge-patch以使用 strategy-merge-patch 部分更新 JSON 对象补丁 REST API。该文档说它可以添加或删除对象,但我已经尝试过,每当我向现有 JSON 添加新对象时,它只是替换它而不是添加新对象。我正在尝试修改 OpenShift 3.2 中的 pod 定义。谁能帮助我它是如何工作的,可能是例子。我还需要使用删除操作,我可以按名称删除值。

0 投票
0 回答
247 浏览

json - Golang,Couchbase 更新子文档并找到 json 路径

在 couchbase 中更新子文档的最佳方法是什么?我正在讨论嵌套的 json 文档。简单的字段可以使用类似的语法轻松更新,set name = 'Jon Doe'但是嵌套的 json 文档呢。我已经阅读了官方文档中的所有页面,但所有页面都使用了一个称为keyspathjson 路径的阶段。

因此,对于像 org.adddress.city.name 这样的复杂嵌套 json,如何从 json 动态或以编程方式查找路径。考虑一个 6-7 级深度的嵌套 json 。它几乎看不到,但它呢。

couchbase 中的子文档更新意味着更新整个文档的一部分或一部分,或者更新可以嵌套的简单字段。

我的方法是找到一个合并 Json 补丁,它将给我更新哪个 json 字段,然后如果该补丁包含嵌套字段, "address": { "city": { "id": "25", "name": "Atlanta" } } 然后使用 mutate_in 函数在 Couchbase 中更新它,我需要那些路径是address.city.idaddress.city.name。即使在 N1QL 查询中更新文档,我也需要生成我相信的那些路径。

我一直在尝试使用递归函数从 json 生成这些路径,因为你不知道下一个会走多远。这是要点。

我想知道是否有任何其他方式不生成更新复杂子文档的路径。

0 投票
0 回答
463 浏览

c# - JsonPatch 保留属性的命名(驼峰式)

我正在使用Microsoft.AspNetCore.JsonPatch我从这里通过 NuGet 添加的,并在尝试将我的属性匹配回 API 端时卡住了。

在序列化/反序列化时,有什么方法可以保留我的属性的驼峰命名法。

我的简化对象:

JsonPatchDocument<MyObject>使用操作创建一个时,Replace我得到了路径/mycamelcasepropertypath但是,在 API 方面,我想通过属性(没有前导 '/')来制作某种 switch-case,比如

问题是:骆驼案是否可以保留,或者我是否必须找到另一种方法来匹配我必须对其执行操作的属性名称?任何想法将不胜感激。

0 投票
2 回答
7391 浏览

c# - 使用 JSON Patch 将值添加到字典

概述

我正在尝试使用 ASP.NET Core 编写一个 Web 服务,它允许客户端查询和修改微控制器的状态。该微控制器包含许多我在我的应用程序中建模的系统 - 例如,PWM 系统、执行器输入系统等。

这些系统的组件都具有可以使用JSON 补丁请求查询或修改的特定属性。例如,可以使用携带. 为了支持这一点,我正在使用该库。{"op":"replace", "path":"/pwms/3/enabled", "value":true}AspNetCore.JsonPatch

我的问题是我正在尝试为新的“CAN 数据库”系统实现 JSON Patch 支持,该系统在逻辑上应该将定义名称映射到特定的 CAN 消息定义,但我不知道该怎么做。

细节

下图为 CAN 数据库系统建模。一个CanDatabase实例在逻辑上应该包含一个形式为 的字典IDictionary<string, CanMessageDefinition>

CAN数据库系统模型

为了支持创建新的消息定义,我的应用程序应该允许用户发送 JSON 补丁请求,如下所示:

在这里,my_new_definition将定义定义name,并且与之关联的对象value应反序列化为CanMessageDefinition objectCanDatabase然后应该将其存储为字典中的新键值对。

问题是path应该指定一个属性路径,对于静态类型的对象将是......好吧,静态的(一个例外是它允许引用数组元素,例如/pwms/3如上所述)。

我试过的

A. Leeroy Jenkins 方法

忘记我知道它不起作用的事实——我尝试了下面的实现(尽管我需要支持动态 JSON Patch 路径,但它只使用静态类型)只是为了看看会发生什么。

执行

测试

结果

在我尝试InvalidCastException将指定更改应用于JsonPatchDocument.

地点:

例外:


B. 依赖动态 JSON Patching

一个更有希望的攻击计划似乎依赖于动态 JSON 补丁,其中涉及对ExpandoObject. 这允许您使用 JSON 补丁文档来添加、删除或替换属性,因为您正在处理动态类型的对象。

执行

测试

结果

进行此更改允许我的这部分测试运行而不会引发异常,但 JSON Patch 不知道要反序列化为什么value,导致数据作为 aJObject而不是 a存储在字典中CanMessageDefinition

尝试 B 的结果

是否有可能“告诉” JSON Patch 如何反序列化信息?也许类似于在 上使用JsonConverter属性Definitions


概括

  • 我需要支持向字典添加值的 JSON 补丁请求
  • 我试过走纯静态路线,但失败了
  • 我尝试过使用动态 JSON 补丁
    • 这部分有效,但我的数据存储为JObject类型而不是预期类型
    • 是否有一个属性(或其他一些技术)可以应用于我的属性以使其反序列化为正确的类型(不是匿名类型)?
0 投票
0 回答
385 浏览

java - Spring-sync 中相同类类型的 ClassCastException

我使用Spring-sync作为RFC 6902 (JSON Patch). 客户端向我发送一个JsonNode表示要应用于服务器对象的操作。

我的代码如下:

我有一个意想不到的 JavaClassCastException告诉我该对象不能转换为相同的类型!!?? 这怎么可能?

在堆栈跟踪下方:

注意:我的类是由相同的加载的classloader,它是Serializable.


我在用着 :

  • 弹簧同步:1.0.0.M1
0 投票
0 回答
69 浏览

json - 修补 JSON 补丁的最有效方法是什么?

说,我有这个 JSON 补丁,它在groups数组中添加了一些东西

我需要为此补丁制作一个补丁,删除[ 0.111, "pretzel" ]. 通常我可以使用操作remove

问题是,我不能确定饼干/饼干/椒盐脆饼补丁会出现哪个数字。我不知道它是数组中的第二个,还是第五个,因为用户可能会应用另一个补丁,将某些内容添加到数组中。

解决此问题的最有效方法是什么,无需制作补丁的精确副本但没有pretzel?

0 投票
0 回答
251 浏览

java - 在 RFC 6902 Json 补丁中处理文件上传

我正在开发一个应用程序,用户可以在其中更新他们的信息。目前,RFC 6902 Json-patch用于通过基本 HTML 表单更新文本信息(名字、姓氏、电话...)。

用户现在可以将图像添加到他们的个人资料中。有什么方法可以Json-patch用来执行多部分操作吗?


注意:图像存储在文件系统中。所以在客户端,只给出图片路径,提交表单后才可以更新。我的 dto 如下:

我认为的解决方案:

由于defaultMedia是String类型,Json-patch可以用来更新图片路径。这个想法是在提交表单时,执行Multipart POST上传图像并获取其 URL 的请求。然后将defaultMediaDTO的设置为新的 URL。

在表单提交时服务器端发生错误的情况下,此解决方案可以创建未使用的图像。所以我需要添加一些东西来清理文件系统。

有没有更简单的解决方案可以满足我的需求?


我在用着 :

  • 春季启动:1.5.1
  • 角度 2:2.4.5
0 投票
1 回答
3272 浏览

java - 在 Spring Boot Data Rest 应用程序中保护 JSON-PATCH 路径

我正在使用一个漂亮的普通spring-boot-starter-data-rest设置并启用了该PATCH方法。一切正常,但我有一个安全问题,想知道缓解它的推荐方法是什么。

问题是PATCH paths 允许从不同的端点更新可达实体。所以,假设我有一个comments端点和一个article端点。每条评论与其文章都有一对一的关联。有权编辑评论的用户可以执行以下操作:

从而更改文章的标题!

显然这不好。

在这种情况下,对于 API 的其他部分,与“文章”的关联需要是可遍历的。但它必须是只读的。

那么......我如何在春天完成这个?

拦截请求?实现处理程序方法?从头开始编写我自己的控制器?

谢谢!

0 投票
2 回答
11918 浏览

c# - 通过对象 ID 更新数组对象的 jsonpatch 路径

我试图找出修补对象集合的最佳方法。我正在尝试更改许多对象的排序顺序,并且认为 jsonpatch 可能是正确的方法。我的对象看起来像:

我创建了一个端点,它允许补丁请求使用 jsonpatch 请求更新集合中的多个对象,如下所示:

我想要做的是在 jsonpatch 路径中使用 ID 属性。我当前的对象结构可能吗?它看起来像:

我需要做什么才能发出这样的补丁请求?