2016-07-27 11 views
2

Go의 JSON 패키지에는 marshal, decode 및 기타 기능이 있습니다.JSON의 마샬/언 마샬, 인코딩/디코딩 및 직렬화/비 직렬화의 관계 및 차이점은 무엇입니까?

나는 decodemarshal의 반대라고 생각했지만 후자는 내가 틀릴 수도 있다는 것을 알았습니다.

나는 내가 가지고있는 근본적인 질문은 생각 :

JSON에 대한 마샬/비 정렬 화, 인코딩/디코딩, 및 직렬화/역 직렬화 사이의 관계와 차이점은 무엇입니까?

감사합니다.

내가 개인적으로 모든면 그래도 동의어 말을 여기 Why are json package's Decode and Marshal methods used here?

+0

@ Tim, 아직 * 답을 선택하지 않은 이유는 무엇입니까? 아직도 만족하지 못했습니까? – xpt

답변

2

예를 참조하십시오 적은 인코딩/디코딩 너무. Go에서 마샬과 언 마샬은 json을 문자열 형식으로 변환하고 그 반대의 변환을하는 데 사용되는 용어입니다. 그러나 C#에서 이러한 동일한 메서드는 serialize 및 deserialize라고 부르며 용어가 전혀 사용되지 않는다는 것을 알고 있습니다 (최소한 표준 라이브러리가 아님).

인코딩은 일부 데이터가 저장되는 형식을 설명하는 형용사로 사용할 수 있습니다. 가장 일반적인 용도는 문자 인코딩 (UTF-8)입니다. Go에서는 json을 비 정렬 화/마샬링 할 수있는 객체를 설명하기 위해 명사로 사용됩니다. 마샬/언 마샬은 항상 동사로 사용되며, 당신은 존슨에게 그 행동을 취합니다.

인코딩은 한 인코딩에서 다른 인코딩으로의 변환을 다루는 더 큰 범주의 패키지를 가리키는 데 사용됩니다.

당신이 마샬링, 마샬링, 디시리얼라이징 또는 일련의 객체 또는 json이라고 말하면 나는 당신이 의미하는 것을 정확히 이해할 것입니다. 당신이 객체를 인코딩하는 json이라고 말하면 나는 명확한 질문을 할 것입니다. "응답이 json으로 인코딩되었습니다."라고 말하면 "응답이 json"이라고 말하는 것보다 그 단어를 사용하는 것이 이상하다고 생각할 수도 있습니다. 희망하는 정보는 당신이 찾고있는 정보입니다.

아 또한, 단지 더 선명도

encoding/json 패키지 Marshal == serialize == encode

+0

감사합니다. 여기 예제를 참조하십시오. http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim

+0

@Tim 분. – evanmcdonnal

2

Unmarshal == deserialize == decodeMarshal 함수와 역 Unmarshal 함수 리턴과 단일 고정 바이트 슬라이스 동작한다. 단일 객체를 바이트로 변환하거나 그 반대로 변환합니다.

또한 EncoderDecoder 유형이 있습니다. 여기에는 EncodeDecode 메서드가 포함되어 있으며 각각 io.Readerio.Writer 인 바이트 스트림에서 작동합니다. 또한 객체를 해당 스트림을 사용하는 개행 문자 구분 기호로 직렬화 또는 비 직렬화 할 수 있습니다.

마샬/언 마샬 함수의 기본 메커니즘과 인코더/디코더 유형이 동일하며 둘 다 동일한 내부 encodeState.marshaldecodeState.unmarshal 코드 경로를 사용합니다. 유일한 차이점은 다양한 사용 패턴에 대해 대체 액세스를 제공한다는 것입니다.

+0

감사합니다. 여기 예제를 참조하십시오. http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim