일반적으로 배열을 배열을 포함하는 객체로 반환하는 API가 있습니다. 다음 예를 들어보세요.
으아악API는 수십 곳에서 매번 다른 이름으로 이 작업을 수행합니다. 이는 두 개의 키로만 발생하는 것이 보장됩니다. 그 중 하나는 number
이고 다른 하나는 배열입니다.
불필요한 필드 레벨을 지속적으로 탐색해야 하므로 결과 구조가 사용하기 다소 불편해집니다.
나는 Go 인터페이스가 다음과 같은 형식을 갖고 있다고 가정하고 싶습니다:
으아악한 가지 옵션은 각 발생에 대해 사용자 정의 UnmarshalJSON
함수를 작성하는 것입니다. 그러나 이는 특히 거의 모든 구조에 나타나는 점을 고려하면 번거로워 보입니다. 제가 생각해낸 해결책은 자체적으로 처리할 수 있는 일반 유형입니다.
현재 시도는 다음과 같습니다.
으아악사용방법은 다음과 같습니다
으아악다음 오류가 발생합니다.
으아악 UnmarshalJSON
代码的最大部分似乎是正确的,因为我的调试器向我显示 sliceVal
正是我所期望的。解组回 NestedArray[T]
내 디버거에서 sliceVal
이 내가 기대했던 것과 정확히 일치한다는 것을 보여 주었기 때문에 코드의 가장 큰 부분이 올바른 것 같습니다. NestedArray[T]
유형으로 다시 역마샬링하는 동안 오류가 발생했습니다.
이 문제를 해결할 방법이 있나요? 지금 하고 있는 것보다 더 좋은 방법이 있을까요? 이것이 나에게 가장 깨끗한 것 같지만 제안에 열려 있습니다.
NestedArray[T].UnmarshalJSON 메서드는 자신을 재귀적으로 호출합니다. 수정하려면 bytes
中的 JSON 对象,但它收到了一个 JSON 数组。通过解组到 []T
而不是 NestedArray[T]
이 필요하기 때문에 내부 호출에서 오류가 발생합니다.
오류와 관련 없이 NestedArray[T].UnmarshalJSON 메서드가 불필요한 인코딩 및 디코딩을 수행했습니다. json.RawMessage를 사용하여 수정하세요.
다음은 두 가지 수정 사항이 모두 포함된 코드입니다.
으아악위 내용은 구조체를 조각으로 역마샬링하기 위한 일반 유형 정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!