-
Notifications
You must be signed in to change notification settings - Fork 212
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding element to an array should not end with "last index + 1" #78
Comments
RFC says:
So it seems, even if it worked nice for our use cases, it's not a valid JSON-Patch :/ Thanks for reporting @danieldonev ! |
You can make check if the element indedx is equal to the array.length-1, then finish with "/-" otherwise stick to the current implementation (in case the element HAS to be inserted in specific position) var element = "test4"; // the array.indexOf(element) will be 4; If(array.indexOf(element) === array.length-1){ |
err.. my bad @danieldonev, Is there any specific reason, why it does not work for you? As we aim to be super fast, every if needs to be considered as performance threat. |
Well, let`s imagine that you have JAVA RESTful API, you will be trying to add an element to an index which does not exist. In the case where you add an element to the JS array of 5 element the new one will be 6-th and the patch path will end with "/5" where the java array has also 5 elements but the last element has index 4 and you are trying to add it to index 5. it will throw an exception |
But I would say that's what standards are for. If Java implementation of JSON-Patch cannot process valid JSON-Patch, then this should be fixed on Java end. |
True. BUT - "If the "-" character is used to index the end of the array (see [RFC6901]), this has the effect of appending the value to the array." Since I am adding the new element at the end of the array it does not make sence to specify the index since i am not moving any of the existing elements. |
The vendor neutral JSON-Patch test suite uses both I guess that a fix for that would be just a change in line https://github.com/Starcounter-Jack/JSON-Patch/blob/master/src/json-patch-duplex.ts#L189 For me switching to @tomalec would there be some potential implications for https://github.com/PuppetJs/JSON-Patch-OT? |
Actually it should support both. If the new element is added in specific position (is not at the end) is must use the /number. If it is at the end just use /- version of it |
Well, I'll check if it affect OT, as switching to more efficient solution is always a good idea. However I cannot find a statement in spec that says it MUST be like that. I can see only implication it opposite direction. Maybe It can be discussed at json-patch spec issue tracker? |
…`foo/-` instead of `foo/array.length + 1`
When is this getting merged/fixed? It's not working correctly with .NET Core's JSON Patch implementation, failing with this error: |
Example
var object = {someValues : ["one", "two"]};
var object2 = {someValues : ["one", "two", "new value"]};
var result = jsonpatch.compare(object, object2 );
result is [{"op":"add", "path": "/someValues/2", "value": "new value"}];
If you add an element to an array at the end of it - it should end with "path/-" and not the index of the new element
The text was updated successfully, but these errors were encountered: