2014-12-12 6 views
3
나는 내가 "역할"필드의 배열 값에서 "roleId2"요소를 제거 할 다음과 같은 JSON 문서가

:배열에서 요소를 제거하는 JSON 패치 형식이란 무엇입니까?

{ 
    "id" : 12345, 
    "firstName": "SomeFirstName", 
    "lastName": "SomeLastName", 
    "roles":["roleId1", "roleId2", "roleId3"] 
} 

가 어떻게 그 요소를 제거하기 위해 JSON 패치 문서를 작성할 수 있습니까? 다음 표현식이 유효합니까?

{"op": "remove", "path":"/roles", "value": "roleId2"} 

또는 (문서의 "roles"값이 배열이기 때문에) 다음과 같이 보입니까? RFC 6902을 읽는에서

{"op": "remove", "path":"/roles", "value": ["roleId2"]} 

, 그것은 나에게 명확하지 않은-경우 올바른 하나가-입니다. RFC에는 다음과 같은 동작이 언급되어 있지만 여기서 관련이 있는지는 잘 모르겠습니다.

배열에서 요소를 제거하면 지정된 인덱스 위의 요소가 한 위치 왼쪽으로 이동합니다.

답변

4

배열에서 인덱스 1에서 항목을 제거하는 올바른 패치는 다음과 같습니다

{"op": "remove", "path": "/roles/1"} 

+0

참으로, 나는 이것이 작동합니다 생각 (Fast-JSON-Patch 사용) JSFiddle에서 예를 들어 작업을 참조하십시오. 그러나, 다음의 이해가 올바른지 확인할 수 있습니까? ** 배열에서 여러 요소를 제거하려면 패치 배열에 OP를 여러 개 제공해야합니다. ** – Niranjan

+0

예. JSON Patch의 사용 예제를 더 보려면 https://github.com/json-patch/json-patch-tests에서이 repo를 검토하면됩니다. 가능한 모든 종류의 패치를 표시하는 84 개의 테스트가 있습니다 – warpech

+12

다른 클라이언트가 "roleId1"을 제거한 직후에 어떤 일이 발생했기 때문에 이것이 매우 좋지 않은 해결책이라고 생각하십니까? 그런 다음 실수로 "roleId2"대신 "roleId3"을 제거 할 것입니다. 이전에 명시 적 테스트 작업을 추가하여이 문제를 해결할 수 있지만 이상적으로는 기본 상황이 더 안전해야하며 이상적으로는 인덱스가 변경 되더라도 패치가 성공하기를 원할 수도 있지만 이상적으로는 제거하십시오. – arendjr