問題タブ [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.
spring - Spring Data Rest - PATCH Postgres jsonb フィールド
短いバージョンは次のとおりです。Spring Data Rest PATCH メソッドを使用して、Postgres フィールドに含まれる JSON オブジェクトにパッチを適用する方法は?jsonb
ここに長いバージョンがあります。次のエンティティを検討してください。
jsonobject
Postgres タイプjsonb
です。これらのゲッター/セッターは、ここで言及されている Spring Data Rest のためにシリアル化/逆シリアル化する方法です。また、これらの回答に記載されているように、フィールドに独自のタイプを与えようとしました。
私たちの目標は、Spring Data Rest を使用して、このフィールドに含まれる JSON オブジェクトにパッチを適用することです。
例えば:
期待される出力:
現在の出力:
Spring Data Rest は、リクエストされたネストされたプロパティにのみパッチを適用するために JSON オブジェクトのプロパティを掘り下げようとするのではなく、Example リソースにパッチを適用し、リクエストされた各属性の値をオーバーライドします。
これは、Spring Data Rest のapplication/merge-patch+json
およびapplication/json-patch+json
メディア タイプのサポートが役立つと考えたときです。各メディア タイプの出力は次のとおりです。
application/merge-patch+json
:
出力:
application/json-patch+json
:
出力:
これは同じ考えに帰着します。エンティティ属性のみが検索され、完全にオーバーライドされるか、見つからないかのいずれかです。
問題は次のとおりです。Spring Data Rest がjsonb
フィールドを処理していることを認識し、エンティティ属性を検索するだけでなく、JSON のネストされたプロパティを検索する方法はありますか?
注意:@Embeddable/@Embedded
注釈は、ネストされたプロパティ名を知っていることを意味するため、回避される可能性が最も高く、jsonb
フィールドへの関心が低下します。
読んでくれてありがとう。
rest - kubernetes 戦略的マージ パッチ
こんにちは、このドキュメントhttps://github.com/kubernetes/kubernetes/blob/master/docs/devel/api-conventions.md#strategic-merge-patchに従って、strategic-merge-patch を使用して JSON オブジェクトを部分的に更新しますパッチ REST API。ドキュメントには、オブジェクトを追加または削除できると書かれていますが、既存のJSONに新しいオブジェクトを追加するたびに、新しいオブジェクトを追加するのではなく、それを置き換えるだけです. OpenShift 3.2 でポッド定義を変更するためにこれを試みています。おそらく例を使って、誰でもそれがどのように機能するか教えてください。名前で値を削除できる削除操作も使用する必要があります。
json - Golang 、サブドキュメントを更新し、json パスを見つける Couchbase
ソファベースのサブドキュメントを更新する最良の方法は何ですか? ネストされた json ドキュメントについて取り上げています。set name = 'Jon Doe'
単純なフィールドは、ネストされた json documentのような構文を使用して簡単に更新できます。公式ドキュメントのすべてのページを読みましたが、すべてのページでkeys
orというフェーズが使用されていましpath
たが、これは json パスです。
したがって、 org.adddress.city.name のような複雑にネストされた json の場合、 json から動的またはプログラムでパスを見つける方法。6 ~ 7 レベルの深さのネストされた json を考えてみてください。ほとんど見られませんが、どうでしょうか。
カウチベースでのサブドキュメントの更新とは、ドキュメント全体の一部または一部を更新するか、ネストできる単純なフィールドを更新することを意味します。
私の方法は、どのjsonフィールドが更新されるかを教えてくれるMerge Jsonパッチを見つけることです。そのパッチにネストされたフィールドが含まれている場合、
"address": {
"city": {
"id": "25",
"name": "Atlanta"
}
}
mutate_in関数を使用してCouchbaseでこれを更新するにはaddress.city.id
、 とであるパスが必要address.city.name
です。N1QL クエリでドキュメントを更新する場合でも、それらのパスを生成する必要があると思います。
次がどこまで続くかわからないため、再帰関数を使用してjsonからこれらのパスを生成しようとしています。ここに要点があります。
複雑なサブドキュメントを更新するパスを生成せずに他の方法があるかどうか知りたいです。
c# - プロパティの命名を保持する JsonPatch (キャメルケース)
ここMicrosoft.AspNetCore.JsonPatch
からNuGet経由で追加したものを使用していますが、API側でプロパティを照合しようとすると行き詰まりました。
シリアル化/逆シリアル化するときに、プロパティのキャメルケースの名前を保持する方法はありますか?
私の単純化されたオブジェクト:
JsonPatchDocument<MyObject>
操作でを作成するとReplace
、パスが取得されます/mycamelcaseproperty
。path
しかし、API側では、プロパティによって(先頭の「/」なしで)ある種のスイッチケースを作成したい
問題は、キャメルケースを維持できるか、またはアクションを実行する必要があるプロパティ名を一致させる方法について別の方法を見つける必要があるかということです。どんなアイデアでも大歓迎です。
c# - JSON パッチを使用して辞書に値を追加する
概要
クライアントがマイクロコントローラーの状態を照会および変更できるようにする ASP.NET Core を使用して Web サービスを作成しようとしています。このマイクロコントローラーには、アプリケーション内でモデル化する多数のシステム (たとえば、PWM システム、アクチュエーター入力システムなど) が含まれています。
これらのシステムのすべてのコンポーネントには、 JSON パッチリクエストを使用してクエリまたは変更できる特定のプロパティがあります。たとえば、micro の 4 番目の PWM は、HTTP リクエストを使用して有効にすることができます。これをサポートするために、ライブラリを使用しています。{"op":"replace", "path":"/pwms/3/enabled", "value":true}
AspNetCore.JsonPatch
私の問題は、定義名を特定のCANメッセージ定義に論理的にマップする必要がある新しい「CANデータベース」システムのJSONパッチサポートを実装しようとしていることです。これについてどうすればよいかわかりません。
詳細
下の図は、CAN データベース システムをモデル化したものです。CanDatabase
インスタンスには、形式の辞書が論理的に含まれている必要がありますIDictionary<string, CanMessageDefinition>
。
新しいメッセージ定義の作成をサポートするには、アプリケーションでユーザーが次のような JSON パッチ リクエストを送信できるようにする必要があります。
ここでmy_new_definition
は、定義nameを定義し、関連付けられたオブジェクトvalue
を objectに逆シリアル化する必要があります。これは、新しいキーと値のペアとしてディクショナリに格納する必要があります。CanMessageDefinition
CanDatabase
問題は、静的に型指定されたオブジェクトのプロパティ パスpath
を指定する必要があることです...まあ、静的です (これに対する例外は、上記のように配列要素を参照できることです)。/pwms/3
私が試したこと
A. リロイ・ジェンキンスのアプローチ
うまくいかないことは忘れてください- 以下の実装を試してみました (動的な JSON パッチ パスをサポートする必要があるという事実にもかかわらず、静的型付けのみを使用しています) 何が起こるかを確認するためだけに.
実装
テスト
結果
指定したInvalidCastException
変更を に適用しようとしたサイトで がスローされますJsonPatchDocument
。
サイト:
例外:
B. 動的な JSON パッチ適用に依存する
より有望な攻撃計画は、動的な JSON パッチ適用に依存しているように見えました。これには、のインスタンスに対してパッチ操作を実行することが含まれますExpandoObject
。これにより、動的に型指定されたオブジェクトを扱っているため、JSON パッチ ドキュメントを使用してプロパティを追加、削除、または置換できます。
実装
テスト
結果
この変更を行うと、例外が発生することなくテストのこの部分を実行できますが、JSON パッチは何を逆シリアル化するかを認識していないため、データがではなくvalue
として辞書に格納されます。JObject
CanMessageDefinition
万が一情報をデシリアライズする方法をJSONパッチに「伝える」ことは可能でしょうか? JsonConverter
おそらく、で属性を使用することに沿ったものDefinitions
ですか?
概要
- ディクショナリに値を追加する JSON パッチ リクエストをサポートする必要がある
- 純粋に静的なルートを下ろうとしましたが、失敗しました
- 動的 JSON パッチを使用してみました
- これは部分的に機能しましたが、データが
JObject
意図したタイプではなくタイプとして保存されました - プロパティに適用して正しい型 (匿名型ではない) に逆シリアル化できる属性 (またはその他の手法) はありますか?
- これは部分的に機能しましたが、データが
java - RFC 6902 Json パッチでファイルのアップロードを処理する
ユーザーが自分の情報を更新できるアプリケーションに取り組んでいます。現時点では、基本的な HTML フォームを介してテキスト情報 (名、姓、電話番号など)RFC 6902 Json-patch
を更新するために使用されます。
ユーザーは自分のプロフィールに画像を追加できるようになりました。Json-patch
マルチパート操作を実行するために使用する方法はありますか?
注 :イメージはファイル システムに保存されます。したがって、クライアント側では、画像パスのみが提供され、フォームの送信後にのみ更新できます。私のdtoは以下の通りです:
私が考える解決策:
defaultMedia
は String 型であるためJson-patch
、イメージ パスの更新に使用できます。アイデアは、フォームが送信されたときにMultipart POST
、画像をアップロードするリクエストを実行し、その URL を取得することです。次にdefaultMedia
、myDTO
を新しい URL に設定します。
このソリューションは、フォーム送信時にサーバー側でエラーが発生した場合に、未使用の画像を作成できます。そのため、ファイル システムをクリーンアップするために何かを追加する必要があります。
私のニーズを満たす簡単な解決策はありますか?
私は使用しています:
- スプリング ブート: 1.5.1
- 角度 2: 2.4.5