Javascript가 JSON.serialize 대신 JSON.stringify를 사용하는 이유는 무엇입니까?


18

"stringify" vs "serialize" 에 대해 궁금 합니다. 나에게 그것들은 똑같지 만 (내가 틀릴 수는 있지만) 과거 경험 (주로 사용)에서 나는 사용 Serialize()하고 결코 사용하지 않는다 Stringify().

Javascript로 간단한 별칭을 만들 수 있다는 것을 알고 있습니다.

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

그러나 나는 둘 사이의 차이점과 왜 stringify가 선택되었는지 궁금합니다.


비교를 위해 C #에서 XML을 문자열로 직렬화하는 방법은 다음과 같습니다.

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}

7
실제로 당신은 할 수 없습니다 JSON.serialize = JSON.stringify?
Daniel DiPaolo

왜 그래?
체이스 플 로렐

1
내 질문을 다시 읽은 후에 C # 예제에서 XML을 직렬화하고 직렬화 된 객체를 변환하는 것으로 나타났습니다 ToString();. 문지름이 있습니다.
체이스 플 로렐

연속성을 위해 다음과 같은 방법을 사용하는 것이 더 좋을 것 같습니다 ... JSON.serialize(obj).toString();또는 jsonObject().toString();...이 방법으로 내 C #과 매우 비슷하게 보이지만 이제는 너무 복잡합니다.
체이스 플 로렐

답변:


12

질문에 대한 두 가지 의견을 자세히 살펴보십시오.

내 질문을 다시 읽은 후에 C # 예제에서 XML을 직렬화하고 직렬화 된 객체를 ToString ();로 변환하는 것을 보았습니다. 문지름이 있습니다.

연속성을 위해 다음과 같은 메소드를 갖는 것이 더 나을 것입니다 ... JSON.serialize (obj) .toString (); 또는 jsonObject (). toString (); ...이 방법은 내 C #과 매우 비슷하게 보이지만 이제는 복잡합니다.

이제 자바 스크립트에서 객체는 해시라는 사실을 기억하십시오 (프로토 타입이나 다른 프레임 워크를 사용하는 경우 "특별한 종류의 해시"로 규정되어야하지만이 예제에서는 간단한 형식이 작동합니다).

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

serialize()Javascript에서 필요할 수있는 유일한 이유는 함수, 다른 객체에 대한 참조 등을 잘라내는 것입니다.

따라서 C # 예제로 돌아가려면 .Serialize()불필요하게 잘라 냈습니다 . 객체는 해시이며 이미 직렬화되어 있으므로 추가 코드 "직렬화"는 자체 코드에서 수동으로 수행해야합니다. 당신을 떠나는 것은 모두입니다 .ToString().

합니까 .stringify()더욱 의미가?


네, stringify는 말이되지만 여전히 사용하고 싶습니다.toString()
Chase

7
toString은 무엇이든 의미 할 수 있습니다. JSON.stringify는 분명히 JSON입니다.
Brandon

11

이는 JSON 표기법이 2002 년 이후가 아니라 1999 년에 지정 되었기 때문입니다 ( asp.net해당 릴리스). 그래서 그들은에 대해 몰랐습니다 serialize.

농담,

라는 단어를 듣는 serialization것은 데이터를 바이트로 변환하는 것과 같습니다. 여기서 JSON.stringify는 객체를 바이트 표현이 아닌 문자열 표현으로 변환하므로 완벽하게 이해됩니다.

추신:

@Chase Florell, JSON.serialize엄격 모드 에서처럼이 코드는 실제로 일부 브라우저에서 실패 할 수 있습니다.

등은 JSON평균 객체가 아닌 경우.


내 (제한된) 경험에서 무언가를 직렬화하면 항상 플랫 파일 저장을 위해 문자열 형식으로 변환 해왔다고 생각합니다. 나는 당신이 말하는 것을 얻습니다.
체이스 플 로렐

나는 그것이 2001 년이라고 생각했다 . wikipedia를 보라 . 그 이름은 아마도 Douglas Crockford의 개인적인 취향 일 것입니다. 1999 년은 3 차 ECMA 표준이 나온 해이며 JSON이 설립되었습니다.
Martijn Pieters

1
@ChaseFlorell 직렬화는 문자 그대로 in 메모리 객체를 직렬로 인접한 데이터 형식으로 변환하여 원자로 포함 될 수 있음을 의미합니다.이를 수행하는보다 일반적인 방법은 네트워크 또는 기타를 통해 전송하는 바이트 단위 표현이라고 생각합니다.
Jimmy Hoffa

@avinashr, re : 당신의 ps : 편집 ... 이 바이올린 은 실패하지 않는 것 같습니다. " JSON평균 개체가 아닌 "방법을 설명 할 수 있습니까? 나는 울퉁불퉁하지 않고, 당신이 무슨 뜻인지 불분명합니다.
체이스 플 로렐

2
@ChaseFlorell은 정확합니다-Javascript와 관련하여 JSON은 유효한 Javascript 객체 의 하위 집합 입니다. 간단한 예는 내 대답을 참조하십시오. 유효한 모든 JSON은 유효한 Javascript 객체 / 해시이지만 모든 Javascript 객체 / 해시는 유효한 JSON은 아닙니다. JSON은 "JavaScript Object Notation"의 약자입니다.
이즈 카타
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.