사용자 정의 JSON을 사용하여 라이브러리 봉인/해제 가능
4748 단어 json-patch
묘사
주소 #82새로운 API 방법
jsonpatch.SetAPI(otherJsonLibrary)
이 추가되었습니다. 이 방법은 사용자 정의 JSON 라이브러리를 사용할 수 있습니다. 필요한 3가지 방법만 있으면 됩니다. Marshal()
,MarshalIndent()
,Unmarshal()
,jsonpatch.ResetAPI()
입니다.그런 다음 표준 라이브러리 방법 대신 이 JSON 라이브러리를 사용합니다.표준 라이브러리로 복원하려면 토론 #1
토론 #2
를 사용하십시오. 봉인/해제를 교환할 충분한 이유가 있다고 생각하지 않습니다.당신은 하나를 제공할 수 있습니까?설령 우리가 이 길을 간다 하더라도, 나는 이런 전역 API 전환을 정말 좋아하지 않는다.json:
@evanphx 우선, 이렇게 빨리 답장해 주셔서 감사합니다!나는 문제 묘사에서 유한하게 용례를 묘사했다. #82. 그러나 여기에는 더 큰 해석이 있다.
기본적으로 표준 JSON 라이브러리에는 많은 Go 사용자가 필요로 하는 많은 기능이 부족하다. 이 점은 대량의 사용과 매우 설정 가능한 대체 JSON 라이브러리가 있다는 사실에서 증명할 수 있다.https://github.com/json-iterator/go
이 대체 라이브러리도 significantly faster than the standard library로 표시됩니다.
그러나 이 라이브러리의 가장 중요한 장점은 다음과 같은 기능을 필요에 따라 맞춤형으로 구성할 수 있다는 것입니다.
https://godoc.org/github.com/json-iterator/go#Config
json-patch
이외의 다른 태그를 사용하여 서로 다른 장면에서 선택적 (취소) 그룹을 허용합니다. 예를 들어 '메타데이터' API 호출에서 (반대) 서열화할 때 구조 필드를 포함해야 하지만 '데이터' API 호출에서 (반대) 서열화할 때 이 필드를 포함해서는 안 됩니다.다음은 몇 가지 예이다.
따라서
json-patch
json 교체기 라이브러리로 전환하기만 하면 될 수 있습니다. 그러나 변환jsonpatch
은 json 교체기와 같은 설정 가능한 API를 제공하는 것이 여전히 중요합니다. 봉송/봉인 작업을 하기 전에 특정한 설정으로 API 실례를 만들고 이 API에 확장자를 등록해야 합니다.저는 더 많은 질문에 대답하고 더 많은 배경을 제공하며 다른 방법으로 이 홍보를 처리하고 싶습니다. 하지만 제가 보고 싶은 관건은 다음과 같습니다.
jsonpatch
기초 json 라이브러리에 추가 설정을 추가할 때마다 더 많은 설정을 지원하기 위해 자주 업데이트하는 것을 원하지 않는다. 그래서 나는 jsonpatch
설정 가능한 json 라이브러리만 허용하는 것이 가장 간단하다고 생각한다.내가 걷는 길은 가장 간단하고 뚜렷한 분리인 것 같다.jsonpatch
호출할 수 있는 부분Marshal()
과 Unmarshal()
만 있으면 됩니다. 이 작업의 세부 사항은 jsonpatch
의 문제가 아니라 다른 라이브러리의 문제이기 때문에 추가 설정 설정으로 과장하고 싶지 않습니다jsonpatch
.IMOjsonpatch
는 json 봉인/봉인 해제 행위가 아니라 병합/수리 기능에 대한 설정 설정만 있어야 한다.관심사 분리.토론 #셋
좋은 정보를 제공해 주셔서 감사합니다. 궁금한 것은 왜 json 패치가 다른 json 패키지가 제공하는 추가 기능을 필요로 합니까?json 패치가 당신이 좋아하는 대체 패키지와 함께 사용할 때 어떤 기능을 제공했습니까?패치 프로그램의 행동을 바꾸지 않기 때문에, 키 정렬, 구조 처리는 상관없는 것 같습니다.토론 #4
에 기술된 옵션이 실제로 이 패치의 행동을 바꾸었다.예를 들어 정렬 키가 있는 JSON 문서를 가져와 다른 정렬 키가 있는 JSON 문서에 통합하면jsonpatch.MergePatch()
의 결과는 키가 정렬되지 않은 JSON 문서입니다.따라서 정렬된 키를 유지하는 유일한 대체 방법은 실행 MergePatch()
후 MergePatch()
tje json-iterator
로 생성된 최종 문서에 대해 완전한 봉인/봉인 왕복을 실행하고 안정적인 키 정렬을 사용하는 것입니다.추가 봉인/해제 호출에 걸리는 추가 CPU 시간은 사용자의 시간을 낭비합니다. 매우 크거나 대량의 JSON 문서를 처리할 때 추가 시간이 누적됩니다.토론 #5
이것은 이 가방의 버그처럼 들리는데 가능하면 지도 순서를 존중하지 않는다.이 오류를 복구하기 위해서, 통합 패치를 관리할 때json-iterator
로 전환할 수 있습니다.토론 #6
통합 패치를 관리할 때json-iterator
로 전환하고 SortMapKeys: true
구성을 사용할 수 있습니다.그러나 이것은 json-iterator
가 지원하는 많은 설정 옵션 중의 하나일 뿐이다. 이 라이브러리는 이러한 옵션을 지원한다. 모든 옵션은 json-patch
의 사용자와 관련이 있을 수 있다. 이 사용자는 JSON 문서의 봉인과 봉인 방식에 대해 매우 구체적인 요구를 가진다.앞서 설명한 바와 같이 다른 구성 옵션json-iterator
은 다음을 포함한 MergePatch
의 최종 출력에 영향을 미칩니다.EscapeHTML
: 부울 값.true인 경우 JSON 값의 HTML이 봉인 프로세서에서 이스케이프됩니다.MarshalFloatWith6Digits
: 부울 값.true인 경우 부동 소수점 서열화에 사용되는 자릿수를 사용자 정의합니다.CaseSensitive
: 부울 값.맵키는 대소문자를 구분하지 않아야 합니까? 아니면 대소문자를 구분해야 합니까?OnlyTaggedField
: 부울 값.봉인을 해제할 때 구조에서 태그 키(기본값: json
가 사용되지 않은 키는 무시됩니다.TagKey
: 문자열.사용자 정의 구조 표시, 즉 json
를 제외한 다른 내용을 사용하여 OnlyTaggedField
가 사실이라면 구조상의 어떤 필드가 표시를 취소해야 하는지 확인할 수 있습니다.MergePatch
및 기타 json-patch
API 메소드의 출력 동작에 영향을 미칩니다.나는
json-patch
어떤 설정 속성을 사용해야 한다고 가정하고 싶지 않다.json-patch
를 깔끔하고 간소화하고 제공하는 가치를 유지하기 위해 이 라이브러리의 사용자들이 사용할 사용자 정의 JSON 라이브러리를 지정해서 봉송/봉인을 어떻게 설정하는지 완전히 제어할 수 있도록 하는 것은 더욱 바람직하고 간단할 것 같다. 내가 이Pull 요청에서 제기한 것처럼.토론 #7
이 문제에 대해 오랫동안 침묵해서 죄송합니다.나는 합병이 아니라 그것을 닫을 것이라고 생각한다.그 이유는 사용자가 서로 다른 json 모듈을 사용하여 서로 다른 일을 할 수 있도록 하기 때문이다. 이는 패치 처리 대상에 대한 가설 (키 순서 등 가설) 을 깨뜨리기 쉽기 때문에 가방을 더욱 취약하게 할 수 있다. 왜냐하면 가방에 대한 잘못된 사용을 의외로 장려하기 때문이다.키 순서 같은 것과 관련이 있기 때문에, 나는 JSON 매핑을 키/값 구조의 일부분으로 관리하여 순서를 유지하는 것을 고려할 것이다.
Reference
이 문제에 관하여(사용자 정의 JSON을 사용하여 라이브러리 봉인/해제 가능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/evanphx/json-patch/issues/83텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)