it-source

Javascript 개체와 JSON 비교

criticalcode 2022. 10. 31. 23:59
반응형

Javascript 개체와 JSON 비교

Javascript 객체와 JSON 문자열의 기본적인 차이점을 명확하게 이해하고 싶습니다.

다음 JS 변수를 생성한다고 가정합니다.

var testObject = {one: 1,"two":2,"three":3};

Q1. 키/속성 이름은 따옴표 포함/불포함 모두 유효합니까?(예:"one" : 1

그렇다면 어떤 차이가 있습니까?

Q2를 사용하여 의 오브젝트를 하는 :JSON.stringify(testObject)JS JSON JSON JSON JSON JSON?

나는 그들이 거의 비슷하다고 느낀다.이것에 대해 자세히 설명해 주세요.

Q3: JSON 문자열을 해석하는 경우 다음 방법을 권장합니다.

var javascriptObj = JSON.parse(jSonString);
  1. 키/속성 이름은 따옴표 포함/불포함 모두 유효합니까?

할 때 「」)가 되어 있는 입니다.if,:,-기타) JSON의 키는 큰따옴표로 묶어야 합니다.

  1. 을 사용하여 위의 오브젝트를 var jSonString = JSON.stringify(testObject);JS 의 2(JS obj) JSON'은?

JSON은 데이터 교환 형식입니다.순서부여 리스트와 순서부여 맵, 문자열, 부울란, 숫자를 문자열로 표현하는 방법을 기술하는 표준입니다.XML과 YAML이 언어 간에 구조화된 정보를 전달하는 방법인 것처럼 JSON도 동일합니다.반면에 JavaScript 개체는 물리적 유형입니다.C++ 클래스/구조인 PHP 배열과 마찬가지로 JavaScript 개체는 JavaScript 내부 유형입니다.

여기 사연이 있어요.상점에서 가구를 구입하여 배송받고 싶다고 가정해 보겠습니다.다만, 재고가 있는 것은 디스플레이 모델 뿐이지만, 구입에 동의하고 있습니다.

숍에서 구입한 그림상자는 살아있는 물건입니다.

    var chestOfDrawers = {
        color: "red",
        numberOfDrawers: 4
    }

단, 게시물에 그림 상자를 보낼 수 없기 때문에 해체(읽기, 문자열화)합니다.가구면에서는 이제 쓸모가 없다.지금은 JSON입니다.플랫팩 형태입니다.

    {"color":"red","numberOfDrawers":4}

그런 다음 그림 상자를 다시 작성합니다(읽기, 구문 분석).오브젝트 형태로 돌아옵니다.

JSON, XML 및 YAML의 배후에 있는 이유는 참가 언어 모두 이해할 수 있는 형식으로 프로그래밍 언어 간에 데이터를 전송할 수 있도록 하기 위함입니다.각 언어가 각각 다른 개체를 나타내기 때문에 JavaScript 개체를 PHP 또는 C++에 직접 제공할 수 없습니다.그러나 오브젝트를 JSON 표기로 문자열화했기 때문에 (데이터를 표현하는 표준화된 방법), 오브젝트의 JSON 표현을 다른 언어(C++, PHP)로 전송할 수 있습니다.또한 오브젝트의 JSON 표현을 바탕으로 JavaScript 오브젝트를 독자적인 오브젝트로 재작성할 수 있습니다.

JSON은 함수나 날짜를 나타낼 수 없습니다.함수 멤버로 객체를 문자열화하려고 하면 함수는 JSON 표현에서 제외됩니다.날짜는 문자열로 변환됩니다.

    JSON.stringify({
        foo: new Date(),
        blah: function () { 
            alert('hello');
        }
    }); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"
  1. JSON 문자열을 해석하는 경우 다음 방법을 권장합니다. var javascriptObj = JSON.parse(jSonString);

네, 하지만 오래된 브라우저는 JSON을 기본적으로 지원하지 않습니다(IE < 8).이를 지원하려면 를 포함해야 합니다.

jQuery를 사용하는 경우, 에 문의할 수 있습니다.JSON.parse()지원되는 경우 후드 아래, 그렇지 않은 경우 입력을 해석하기 위해 커스텀 구현으로 폴백합니다.

Q1: javascript에서 오브젝트 리터럴을 정의할 때 키에 따옴표가 포함되거나 포함되지 않을 수 있습니다.따옴표로 특정 키를 지정할 수 있다는 점 이외에는 차이가 없습니다.따옴표로 키를 사용하지 않으면 인터프리터가 해석에 실패합니다.예를 들어 느낌표만 있는 키를 원하는 경우 따옴표가 필요합니다.

a = { "!": 1234 } // Valid
a = { !: 1234 } //  Syntax error

그러나 대부분의 경우 객체 리터럴에서 키 주위에 따옴표를 생략할 수 있습니다.

Q2: JSON은 문자 그대로 문자열 표현입니다.그냥 끈이에요.이 점을 고려해 주십시오.

var testObject = { hello: "world" }
var jSonString = JSON.stringify(testObject);

★★testObject그 속성에 호출하여 객체에 대해 수행할 수 있는 다른 작업을 수행할 수 있습니다.

testObject.hello => "world"

반,는jsonString입니다.

jsonString.hello => undefined

다른 한 가지 차이점에 주의해 주십시오.JSON에서는 모든 키를 따옴표로 묶어야 합니다.이는 Q1에서 설명한 바와 같이 인용문이 생략될 수 있는 오브젝트 리터럴과 대조됩니다.

Q3을 할 수 .JSON은 다음과 같습니다.JSON.parse(브라우저 또는 프레임워크가 제공하는 경우) 일반적으로 이 방법이 가장 좋습니다. 사용해도 요.evalJSON은 유효한 javascript 코드이지만 여러 가지 이유로 전자의 방법을 권장합니다(eval은 이와 관련된 많은 문제가 있습니다).

JSON에 의한 문제 해결

두 컴퓨터 간에 일반 JavaScript 개체를 교환하고 두 가지 규칙을 설정했다고 가정합니다.

  • 전송된 데이터는 정규 문자열이어야 합니다.
  • 교환할 수 있는 것은 속성뿐이며 메서드는 전송되지 않습니다.

이제 첫 번째 호스트에 두 개의 개체를 생성합니다.

var obj1 = { one: 1,"two":2,"three":3 }; // your example
var obj2 = { one: obj1.one, two: 2, three: obj1.one + obj1.two };

이러한 개체를 두 번째 호스트로 전송하기 위한 문자열로 변환하려면 어떻게 해야 합니까?

  • 첫 번째 오브젝트의 경우 리터럴 정의에서 얻은 이 문자열을 전송할 수 있습니다.'{ one: 1,"two":2,"three":3 }'그러나 문서의 스크립트 부분에 있는 리터럴은 읽을 수 없습니다(적어도 쉽지는 않습니다).그렇게obj1그리고.obj2같은 방법으로 처리되어야 합니다.
  • 모든 Atribut과 그 값을 열거하고 오브젝트 리터럴과 유사한 문자열을 작성해야 합니다.

JSON은 방금 설명한 니즈에 대한 솔루션으로 작성되었습니다.이는 모든 Atribut과 값을 나열하여 객체에 해당하는 문자열을 작성하는 규칙 집합입니다(메서드는 무시됩니다).

JSON은 Atribute 이름 및 값에 이중 따옴표를 사용하는 것을 정규화합니다.

JSON은 규칙 세트(표준)일 뿐이라는 점에 유의하십시오.

몇 개의 JSON 개체가 생성됩니까?

단, JS 엔진에 의해 자동으로 생성됩니다.

브라우저에 있는 최신 JavaScript 엔진에는 네이티브 오브젝트(JSON)가 있습니다.이 JSON 오브젝트는 다음을 수행할 수 있습니다.

  • JSON 표준을 사용하여 작성된 문자열을 JSON.parse(string)를 사용하여 디코딩합니다.그 결과 JSON 문자열에 있는 Atribut과 값을 가진 일반 JS 객체가 생성됩니다.

  • JSON.stringify()를 사용하여 일반 JS 객체의 속성/값을 인코딩합니다.그 결과 문자열이 JSON 규칙 집합에 준거합니다.

(단일) JSON 오브젝트는 코덱과 비슷하며, 그 기능은 인코딩 및 디코딩입니다.

주의:

  • JSON.parse()는 JSON 개체를 만들지 않고 일반 JS 개체를 만듭니다.개체 리터럴을 사용하여 작성된 개체와 JSON.parse()에 의해 JSON 호환 문자열에서 생성된 개체 사이에는 차이가 없습니다.

  • 모든 변환에 사용되는 JSON 개체는 1개뿐입니다.

질문으로 돌아가겠습니다.

  • Q1: 객체 리터럴에는 큰따옴표를 사용할 수 있습니다.따옴표는 속성 이름에 선택적으로 사용되며 문자열 값에는 필수입니다.오브젝트 리터럴 자체는 따옴표로 둘러싸여 있지 않습니다.

  • Q2: 리터럴에서 작성한 오브젝트와 JSON.parse()를 사용한 오브젝트는 엄밀하게 동일합니다.다음 두 개체는 생성 후 동일합니다.

    var obj1 = { one: 1, "two": 2, "three": 3 };
    var obj2 = JSON.parse('{ "one": "1", "two": "2", "three": "3" }');

  • Q3: 최신 브라우저JSON.parse()는 JSON 준거 문자열에서 JS 객체를 작성하기 위해 사용합니다.(jQuery에는 모든 브라우저에서 사용할 수 있는 동일한 메서드도 있습니다).

Q1 - JS에서는 키가 예약된 단어이거나 잘못된 토큰인 경우에만 따옴표를 사용해야 합니다.JSON에서는 키 이름에 항상 큰따옴표를 사용해야 합니다.

- 제 22 -jsonString는 입력 객체의 시리얼 버전입니다.

Q3 - 동일한 외관의 물체로 역직렬화할 수 있습니다.JSON.parse()

질문에는 이미 좋은 답변이 게시되어 있습니다.앞의 답변에 대한 설명을 이해하기 쉽게 하기 위해 아래에 작은 예를 추가하겠습니다.하여 IDE를 보다 잘 할 수 있도록 IDE가 포함된 를 달아 .invalid_javascript_object_no_quotes오브젝트 선언을 사용하여 컴파일 시간 오류를 방지합니다.

// Valid JSON strings(Observe quotes)
valid_json = '{"key":"value"}'
valid_json_2 = '{"key 1":"value 1"}' // Observe the space(special character) in key - still valid


//Valid Javascript object
valid_javascript_object_no_quotes = {
    key: "value"  //No special character in key, hence it is valid without quotes for key
}


//Valid Javascript object
valid_javascript_object_quotes = {
    key:"value",  //No special character in key, hence it is valid without quotes for key
    "key 1": "value 1" // Space (special character) present in key, therefore key must be contained in double quotes  - Valid
}



console.log(typeof valid_json) // string
console.log(typeof valid_javascript_object_no_quotes) // object
console.log(typeof valid_javascript_object_quotes) // object

//Invalid Javascript object 
invalid_javascript_object_no_quotes = {
   key 1: "value"//Space (special character) present in key, since key is not enclosed with double quotes "Invalid Javascript Object"
}

언급URL : https://stackoverflow.com/questions/8294088/javascript-object-vs-json

반응형