Skip to content

Removal of the root #17

Open
Open

Description

@espadrine

The patch { "op": "remove", "path": "" } is currently undefined.

I believe it should have the same result as { "op": "add", "path": "", "value": null }. As a side-result, it would also validate the definition of { "op": "replace", "path": "", "value": null }, which states:

This operation is functionally identical to a "remove" operation for
a value, followed immediately by an "add" operation at the same
location with the replacement value.

In any case, it would benefit from being specified. Some implementations currently throw, and that is unfortunate, as it breaks the specification as quoted above..

Activity

  1. d-frey commented on Sep 2, 2016

    @d-frey

    I disagree with the solution. I think { "op": "remove", "path": "" } should be an error. If you want to replace the root element, you can already use { "op": "add", "path": "", "value": null } today. Even that is strange.

    It could be reasonable to allow the replace to work with an empty path to replace the element completely, and, compatibility aside, disallow add to do the same. This would provide the most intuitive semantics. add and remove require a non-empty path, replace is able to replace the root.

    But since we most likely want to be compatible, I think add should stay as it is, replace should explicitly allow to replace the root and remove on the root should be an error.

  2. espadrine commented on Nov 13, 2016

    @espadrine
    Author

    What matters most is that the undefined behavior gets specified.

    That being said, if we go with your solution, we lose the functional equivalence of replace to remove + add, which will be a bit counterintuitive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions