I'm not fond of that decision either.

Paul

On Tue, 2012-12-11 at 09:22 -0800, James M Snell wrote:

> You are reading it correctly. Note also that the very next bullet
> point says: 
> 
> 
> 
>   A member to add to an existing object - whereupon the supplied
>   value is added to that object at the indicated location.  If the
>   member already exists, it is replaced by the specified value.
> 
> 
> So an "add" is really a "replace" that does not have the "target
> location MUST exist" restriction. Personally, I'm not too fond of that
> decision. For anything other than an array, "add" should fail if the
> target already exists. For arrays, "add" should insert but never
> replace an existing value. 
> 
> 
> - James
> 
> 
> 
> On Tue, Dec 11, 2012 at 7:25 AM, Barry Leiba <[email protected]>
> wrote:
> 
>         > Abstract
>         >    JSON Patch defines the media type
>         "application/json-patch", a JSON
>         >    document structure for expressing a sequence of
>         operations to apply
>         >    to a JSON document, suitable for use with the HTTP PATCH
>         method.
>         
>         
>         ...
>         >
>         http://datatracker.ietf.org/doc/draft-ietf-appsawg-json-patch/
>         
>         I've reviewed JSON Patch and JSON Pointer as responsible AD,
>         and am
>         very happy with the documents -- this is good work, well
>         written.  I
>         came up with one issue that I want to discuss as part of last
>         call:
>         
>            4.1.  add
>         
>            The "add" operation adds a new value at the target
>         location.  The
>            operation object MUST contain a "value" member that
>         specifies the
>            value to be added.
>         
>            For example:
>         
>            { "op": "add", "path": "/a/b/c", "value": [ "foo",
>         "bar" ] }
>         
>            When the operation is applied, the target location MUST
>         reference one
>            of:
>         
>            o  The root of the target document - whereupon the
>         specified value
>               becomes the entire content of the target document.
>         
>         Now, what this means is that if we start with this:
>         
>         { "a": { "num": 1 } }
>         
>         and we apply this:
>         
>         { "op": "add", "path": "", "value": [ "foo", "bar" ] }
>         
>         we end up with this:
>         
>         [ "foo", "bar" ]
>         
>         This doesn't strike me as having any sense of an "add"
>         operation -- it
>         appears to be a special case that doesn't fit.  In any other
>         situation, using any other path, the operation either adds
>         something
>         to what's already there, or it fails.  But when the path is
>         "", it's
>         anomalous.
>         
>         So, three questions:
>         
>         1. Do I have this right, or am I mistaken about the result of
>         that operation?
>         
>         2. Assuming I have it right, can someone explain why it's this
>         way?
>         
>         3. Can someone explain why this is the right way to specify
>         it, rather
>         than using "replace" for this?
>         
>         Barry
>         
>         _______________________________________________
>         apps-discuss mailing list
>         [email protected]
>         https://www.ietf.org/mailman/listinfo/apps-discuss
>         
> 
> 
> 
> 
> _______________________________________________
> apps-discuss mailing list
> [email protected]
> https://www.ietf.org/mailman/listinfo/apps-discuss


Reply via email to