JSONとオブジェクトリテラル表記の違いは何ですか?


220

オブジェクトリテラル表記を使用して定義されたJavaScriptオブジェクトとJSONオブジェクトの主な違いは何ですか?

JavaScriptブックによると、これはObject Notationを使用して定義されたオブジェクトであると記載されています。

var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};

この場合、なぜJSONオブジェクトではないのですか?引用符を使用して定義されていないからといって?


20
「この場合、なぜJSONオブジェクトではないのですか?」:キーは文字列である必要があり、関数は有効なJSON値ではないためです。
マット

回答:


248

まずJSONが実際に何であるかを明確にしましょう。JSONは、XML、CSV、YAMLによく似た、言語に依存しないテキスト形式のデータ交換フォーマットです。

データはさまざまな方法で格納できますが、テキストファイルに格納してコンピューターで読み取り可能にする必要がある場合は、何らかの構造に従う必要があります。JSONは、このような構造を定義する多くのフォーマットの1つです。

このような形式は通常、言語に依存しません。つまり、Java、Python、JavaScript、PHPで処理できるため、名前を付けることができます。

対照的に、JavaScriptはプログラミング言語です。もちろんJavaScriptはデータを定義/説明する方法も提供しますが、構文はJavaScriptに非常に固有です。

反例として、Pythonにはタプルの概念があり、その構文は(x, y)です。JavaScriptにはこのようなものはありません。


JSONとJavaScriptオブジェクトリテラルの構文の違いを見てみましょう。

JSONには次の構文上の制約があります。

  • オブジェクトキー文字列(つまり、二重引用符で囲まれた文字シーケンス)である必要があります")。
  • 値は次のいずれかです。
    • 文字列
    • (JSON)オブジェクト
    • 配列
    • true
    • false
    • null
  • 重複するキー({"foo":"bar","foo":"baz"})は、未定義の実装固有の結果を生成します。JSON仕様はそれらのセマンティクスを明確に定義していません

JavaScriptでは、オブジェクトリテラルに

  • キーとしての文字列リテラル、数値リテラル、または識別子名(ES6以降、キーも計算できるようになり、さらに別の構文が導入されました)。
  • 値には、関数定義やなど、有効なJavaScript式を使用できますundefined
  • 重複するキーは、定義され、指定された結果を生成します(ルーズモードでは、後者の定義が前者を置き換えます。ストリクトモードでは、エラーです)。

次の2つの理由により、構文を確認しただけでは、例はJSONではありません。

  1. キーは文字列(リテラル)ではありません。それらは識別子名です。
  2. 「JSONオブジェクト」に値として関数を割り当てることはできません(JSONでは関数の構文が定義されていないため)。

しかし、最も重要なのは、私の説明を最初から繰り返すことです。あなたはJavaScriptコンテキストにいます。JavaScriptオブジェクトを定義します。存在する場合、「JSONオブジェクト」は文字列にのみ含めることができます。

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
 var json = '{"foo": 452}'; // creates a string containing JSON

つまり、JavaScriptソースコードを記述していて、文字列を処理していない場合、JSONを処理していません。たぶんあなたはJSONとしてデータを受け取りました(例えばajax経由またはファイルからの読み込み)、あなたまたはあなたが使用しているライブラリがそれを解析すると、それはもはやJSONではなくなります。


オブジェクトリテラルとJSONの外観が似ているからといって、それらに同じ名前を付けることができるわけではありません。参照"JSONオブジェクト"のようなものはありません


8
また、JSONはObject Literal Notationのサブセットであることにも注意してください
Sean Kinsey

14
@SeanKinsey:ないことを除いて:timelessrepo.com/json-isnt-a-javascript-subset
mpen '22

1
通常、あなたはコメントは合法であり、コメントは(参照のためにJSON仕様は許可しないコンテキストでJavaScriptのオブジェクトリテラルを期待することは注目に値するかもしれないこのポストを
ブライアン・ヘンリー

""を使用するかどうかにかかわらず、オブジェクトリテラルのキーは常に文字列です。
オーバーエクスチェンジ

2
@overexchange:「オブジェクトリテラルのキーは常に文字列です」ここでは2つのことを混ぜ合わせていますが、ここでも明確な線を引いていないので、あなたを非難することはできません。オブジェクトリテラルとオブジェクトを区別する必要がありますリテラルは、あなたがソースコードで記述した文字列です。値は、ソースコードを解釈することによって作成されるものです。オブジェクトリテラル(構文)では、識別子名文字列リテラル数値リテラルを使用できます。実行時に、これらはすべて文字列に変換されることは間違いありません(ただし、シンボルも用意されています)。
フェリックスクリング2016年

41

JSONの構文は、次のようにはるかに制限されています。

  • キー値は引用符で囲む必要があります
  • 文字列がでクォートされなければなりません"'
  • 値の範囲がより限定されている(機能が許可されていないなど)

1
この「機能許可なし」が気に入りました。
Karan Kaw 2017

コメントも許可されていません。疑わしい理由で。(数回質問されたと聞いた。)これが私が言う主な違いです
。– user7610

15

「JSONオブジェクト」というものは本当にありません。

JSON仕様は、データを文字列としてエンコードするための構文です。人々が「JSONオブジェクト」(javascriptで)と呼ぶものは、実際には通常のJavaScriptオブジェクトであり、(おそらく)有効なJSON文字列から逆シリアル化されており、有効なJSON文字列として簡単に再シリアル化できます。これは通常、データのみが含まれていることを意味します(関数は含まれません)。また、JSONには日付タイプがないため、日付がないことも意味します(おそらくJSONで最も苦痛なことです;)。

さらに、(サイドラント...)人々が「JSONオブジェクト」について話すとき、彼らはほとんど常に、トップレベルに「中括弧」を持つデータを意味します。これはjavascriptオブジェクトにうまく対応しています。ただし、JSON仕様では、JSON文字列の最上位に単一の「中括弧」オブジェクトが存在する必要はありません。リストをトップレベルに持つこと、または単一の値だけを持つことは、完全に有効なJSONです。したがって、すべての「JSONオブジェクト」は有効なJSONに対応しますが、すべての有効なJSON文字列が「JSONオブジェクト」と呼ばれるものに対応するわけではありません。(文字列がリストまたはアトミック値を表す可能性があるため)


5
回答にエラーがあります:トップレベルにアトミック値を持つことは無効な JSONです。JSONでは、上部をオブジェクトまたは配列のいずれかにすることができますが、それ以外は何もできません。標準のRFC4627では、JSONの文法はと記述されていますJSON-text = object / array
Rory O'Kane 2013

9

JavaScriptのJSONによると、

JSONは、JavaScriptのオブジェクトリテラル表記のサブセットです。

つまり、有効なJSONは有効なJavaScriptオブジェクトリテラル表記でもありますが、必ずしもその逆ではありません。

ドキュメントを読むことに加えて、@ Filix Kingが示唆したように、JSONLintオンラインJSONバリデーターをいじることもお勧めします。これが、JSONオブジェクトのキーが文字列でなければならないことを知った方法です。


2
注意してください:これは正確なサブセットではなく、 JSオブジェクトリテラルとして無効だったJSON文字列がいくつかあります
Bergi

5

🔫 JSON:XMLへの無脂肪の代替

JSONは、分散アプリケーションやサービスの作成を非常に容易にすることに気付いた人々に広く採用されています。JSONの公式インターネットメディアタイプはapplication/json RFC 4627です。JSONファイル名は拡張子を使用します.json


►JavaScript Object Notation(JSON)は、言語に依存しない軽量のテキストベースのデータ交換フォーマットです。JSONは、プログラミング言語で記述されたアプリケーション間でデータを交換するために使用されています。

JSONオブジェクトは、解析と文字列化という2つの関数を含む単一のオブジェクトであり、JSONテキストの解析と構築に使用されます。

  • JSON.stringifyは、次のJSON文法に準拠する文字列を生成します。
  • JSON.parseは、JSON文法に準拠した文字列を受け入れます。

parseJSONメソッドはに含まれますFourth Edition of ECMAScript。それまでの間、JavaScript実装はjson.orgで入手できます。

var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object

// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}

// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object

// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'

JSONはJavaScriptのサブセットです。Javascriptは、ECMAScriptプログラミング言語標準から派生しました。


►ECMAScript

ECMAScriptは、世界で最も広く使用されている汎用プログラミング言語の1つに成長しました。これは、Webブラウザーに組み込まれた言語として最もよく知られていますが、サーバーおよび組み込みアプリケーションにも広く採用されています。 ECMAScriptは、JavaScript(Netscape Communications)とJScript(Microsoft Corporation)で最もよく知られているいくつかの元々のテクノロジーに基づいています。1994年以前はECMAは「European Computer Manufacturers Association」として知られていましたが、1994年に組織がグローバルになった後、「商標」「Ecma」は歴史的な理由で保持されました。

ECMAScriptは言語ですが、JavaScript、JScript、さらにはActionScriptも呼び出され"Dialects"ます。

方言は同じ言語から派生しています。それらは同じ言語から派生したため、互いに非常に似ていますが、いくつかの変更が加えられています。方言は、言語自体のバリエーションです。単一の言語から派生しています。

  • SQL言語-Hibernate MySQL Dialect、Oracle Dialect、..いくつかの変更または追加された機能があります。

ユーザーのブラウザとコンピュータに関する情報。

navigator.appName // "Netscape"

ECMAScriptは、JavaScriptの基礎を形成するスクリプト言語です。JavaScript language resources

ECMA-262 Links
Initial Edition, June 1997 PDF.
2nd Edition, August 1998 PDF.
3rd Edition, December 1999 PDF.
5th Edition, December 2009 PDF.
5.1 Edition, June 2011 HTML.
6th Edition, June 2015 HTML.
7ᵗʰ Edition, June 2016 HTML.
8th edition, June 2017 HTML.
9th Edition, 2018 HTML.

注« 作業が不完全だったため、 ECMAScriptの第4版公開されませんでした。


JSONは、構造化データの移植可能な表現のために、一連の小さなフォーマットルールを定義します。

  1. ►キー値は引用符で囲む必要があります。キーに使用できるのは文字列のみです。String以外を使用すると、Stringに変換されます。ただし、文字列以外のキーの使用はお勧めしません。このような例を確認してください- { 'key':'val' }以上RFC 4627 - jsonformatter

    var storage = {
      0 : null,
      1 : "Hello"
    };
    console.log( storage[1] ); // Hello
    console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
    
    var objLiteral = {'key1':'val1'};
        var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
        var obj = { k: 'v' }, obj2 = { k2: 'v2' };
        var fun = function keyFun() {} ;
    
    objLiteral[ arr ] = 'ArrayVal';     objLiteral[ arr2 ] = 'OverridenArrayVal';
    objLiteral[ obj ] = 'ObjectVal';    objLiteral[ obj2 ] = 'OverridenObjectVal';
    objLiteral[ fun ] = 'FunctionVal';
    
    console.log( objLiteral );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    console.log( JSON.stringify( objLiteral ) );
    // {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
    console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    
    console.log('Accessing Array  Val : ', objLiteral[ [10,20] ] );
    console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
    console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
  2. ►JSON文字列は、「ではなく」で引用符で囲む必要があります。文字列は、CまたはJavaの文字列とよく似ています。文字列は二重引用符で囲む必要があります。

    • リテラルは変数ではなく固定値であり、文字通りスクリプトで指定します。
    • 文字列は、バックスラッシュエスケープメントで引用符で囲まれた0個以上の文字のシーケンスであり、ほとんどのプログラミング言語で使用されている表記と同じです。
      • 🔫-文字列では特殊記号を使用できますが、使用はお勧めしません。
      • \ "-特殊文字はエスケープできます。ただし、エスケープ( ')を使用しないことをお勧めします。一重引用符。厳密モードでは、スローされてエラーになります- SyntaxError: Unexpected token ' in JSON

    { "Hai\" \n Team 🔫":5, "Bye \'": 7 }オンラインのJSON Edtions でこのコードを確認してください。ModesnotStrict,Strinct.

    var jsonString = "{'foo': 452}"; // {'foo': 452}
    var jsonStr = '{"foo": 452}'; // {"foo": 452}
    
    JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
    JSON.parse( jsonStr ); // Object {foo: 452}
    
    objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
    objLiteral.key2 = 'val';
    
    // objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
    objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
    
    JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}

オブジェクトプロパティアクセサー は、ドット表記またはブラケット表記を使用して、オブジェクトのプロパティへのアクセスを提供します。

  1. ►値の範囲が制限されている(機能が許可されていないなど)。値は、二重引用符で囲まれた文字列、数値、ブール値、null、オブジェクト、または配列にすることができます。これらの構造はネストすることができます。

    var objLiteral = {};
    objLiteral.funKey = function sayHello() {
        console.log('Object Key with function as value - Its outcome message.');
    };
    
    objLiteral['Key'] = 'Val';
    
    console.log('Object Literal Fun : ', objLiteral );
    // Object Literal Fun :  Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
    console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}

ここに画像の説明を入力してください


JavaScriptはECMAScript標準の最も一般的な実装です。Javascriptのコア機能はECMAScript標準に基づいていますが、JavascriptにはECMA仕様/標準にはないその他の追加機能もあります。すべてのブラウザーにはJavaScriptインタープリターがあります。

JavaScriptは動的に型付けされる言語です。つまり、変数を宣言するときにデータ型を指定する必要がなく、データ型はスクリプトの実行中に必要に応じて自動的に変換されます。

Literals

'37' - 7    // 30
'37' + 7    // "377"
+'37' + 7   // 44
+'37'       // 37
'37'        // "37"

parseInt('37');     // 37
parseInt('3.7');    // 3

parseFloat(3.7);    // 3.7

// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7'              // 3.7

Object literals RFC 7159

オブジェクト構造は、0個以上の名前と値のペア(またはメンバー)を囲む中括弧のペアとして表されます。名前は文字列です。各名前の後にコロンを1つ付けて、名前と値を区切ります。1つのカンマで値と後続の名前を区切ります。オブジェクト内の名前は一意である必要があります。

ECMAScriptは、プロトタイプベースの継承をサポートしています。すべてのコンストラクタには関連付けられたプロトタイプがあり、そのコンストラクタによって作成されたすべてのオブジェクトには、そのコンストラクタに関連付けられたプロトタイプ(オブジェクトのプロトタイプと呼ばれる)への暗黙的な参照があります。さらに、プロトタイプには、そのプロトタイプへのnull以外の暗黙的な参照が含まれる場合があります。これはプロトタイプチェーンと呼ばれます。

クラスベースのオブジェクト指向言語では、一般に、状態はインスタンスによって運ばれ、メソッドはクラスによって運ばれ、継承は構造と動作だけのものです。ECMAScriptでは、状態とメソッドはオブジェクトによって伝達され、構造、動作、および状態はすべて継承されます。

プロトタイプは、ECMAScriptで構造、状態、および動作の継承を実装するために使用されるオブジェクトです。コンストラクターがオブジェクトを作成すると、そのオブジェクトは、プロパティ参照を解決する目的で、コンストラクターに関連付けられたプロトタイプを暗黙的に参照します。コンストラクターに関連付けられたプロトタイプは、プログラム式コンストラクター.prototypeによって参照でき、オブジェクトのプロトタイプに追加されたプロパティは、継承を通じて、プロトタイプを共有するすべてのオブジェクトによって共有されます。


2

RFCがブログや意見に基づく誤解よりも重要であるとまだ考えている人のために、いくつかのポイントを明確にして回答してみましょう。以前の回答ですでに述べたすべての正しい違いを繰り返すつもりはありません。ここでは、いくつかの重要な部分をまとめた値を追加しようとしていますrfc7159

https://tools.ietf.org/html/rfc7159からの抜粋

  1. JavaScript Object Notation(JSON)は、構造化データのシリアル化のためのテキスト形式です。 ECMAScriptプログラミング言語標準、第3版[ECMA-262]で定義されているように、JavaScript のオブジェクトリテラルから派生しています
  2. JSONは、4つのプリミティブ型(文字列、数値、ブール値、およびnull)と2つの構造化型(オブジェクトと配列)を表すことができます。
  3. オブジェクトは、名前が文字列であり、値が文字列、数値、ブール値、ヌル、ゼロまたはそれ以上の名前/値のペアの順序なしコレクション、あるオブジェクト、または配列。
  4. begin-object = ws%x7B ws; {左中括弧
  5. end-object = ws%x7D ws; 右中括弧
  6. JSON値は、オブジェクト、配列、数値、文字列、または次の3つのリテラル名のいずれかである必要があります:false null tr​​ue
  7. オブジェクト構造は、中括弧の対として表されます。
  8. オブジェクト内の名前は一意である必要があります。 object = begin-object [member *(value-separator member)] end-object
  9. オブジェクト名前がすべて一意であるが、その受信しているすべてのソフトウェアの実装という意味で、相互運用可能であるオブジェクトは、名前と値のマッピングに同意します。オブジェクト内の名前が一意でない場合、そのようなオブジェクトを受け取るソフトウェアの動作は予測できません。
  10. 例(RFCの12ページから)

    これはJSONオブジェクトです:

          {
            "Image": {
                "Width":  800,
                "Height": 600,
                "Title":  "View from 15th Floor",
                "Thumbnail": {
                    "Url":    "http://www.example.com/image/481989943",
                    "Height": 125,
                    "Width":  100
                },
                "Animated" : false,
                "IDs": [116, 943, 234, 38793]
              }
          }

    そのイメージのメンバーである、オブジェクト、そのサムネイルメンバーであるオブジェクト IDがメンバー数の配列です。

「JSONオブジェクト」というものは本当にありません。

本当に?


1
デービ、それはではありませんObject、それはStringです。ありがとう
アブアブ2017

1

私が理解している限り、主な違いは柔軟性です。

JSONは「JavaScript Object Notation」の一種のラッパーであり、ユーザーはオブジェクトを定義するためのより厳密な規則に従う必要があります。そして、これは、JavaScript Object Notation機能によって提供される可能なオブジェクト宣言方法を制限することによって行われます。

その結果、プラットフォーム間のデータ交換により適した、よりシンプルで標準化されたオブジェクトが得られます。

したがって、基本的に、上記の例のnewObjectは、JavaScript Objeect Notationを使用して定義されたオブジェクトです。ただし、JSON標準が必要とするルールに従っていないため、「有効な」JSONオブジェクトではありません。

このリンクも非常に役立ちます:http : //msdn.microsoft.com/en-us/library/bb299886.aspx


2
JSONとオブジェクト表記の目的は完全に異なります。1つ目はデータ交換にのみ使用され、2つ目は内部使用のみのJSオブジェクトの作成に使用されます。それらは同じものの厳密なバージョンではありません。
ilyo

0

まず、JSONとは何かを知っておく必要があります。

言語に依存しないデータ交換フォーマットです。JSONの構文はJavaScript Object Literal表記に触発されたものですが、それらの間には違いがあります。

たとえば、JSONではすべてのキーを引用符で囲む必要がありますが、オブジェクトリテラルでは必要ありません。

// JSON:{"foo": "bar"}

//オブジェクトリテラル:var o = {foo: "bar"}; JavaScript(より正確にはECMAScript 3rd Edition)では、プロパティ名としての予約語の使用が禁止されているため、JSONでは引用符が必須です。次に例を示します。

var o = {if: "foo"}; // ES3のSyntaxError一方、プロパティ名として文字列リテラルを使用すると(プロパティ名を引用符で囲んで)問題は発生しません。

var o = {"if": "foo"}; したがって、「互換性」(および簡単に評価できるかどうか)については、引用符は必須です。

JSONのデータ型も次の値に制限されます。

文字列番号オブジェクト配列リテラル:true false null文字列の文法が変更されました。JavaScriptでは二重引用符で区切る必要がありますが、JavaScriptでは一重引用符または二重引用符を相互に使用できます。

//無効なJSON:{"foo": 'bar'}受け入れられる数値のJSON文法も変更され、JavaScriptでは0xFFなどの16進リテラル、または(悪名のある)8進リテラル、たとえば010を使用できます。JSONでは、 10進リテラルのみ。

//無効なJSON:{"foo":0xFF}


0

JavaScriptオブジェクトリテラルvs JSON:

  • オブジェクトリテラル構文は、JavaScriptオブジェクトを作成するための非常に便利な方法です。
  • JSON「JavaScriptオブジェクト表記法」の略で、言語は、javascriptオブジェクトリテラル構文から派生した構文を持っています。プログラミング言語に依存しないテキスト形式のデータ転送フォーマットとして使用されます。

例:

JSオブジェクト表記法。JSでコード内にオブジェクトを簡単に作成するために使用されます。

const JS_Object = {
  1: 2,  // the key here is the number 1, the value is the number 2
  a: 'b', // the key is the string a, the value is the string b
  func: function () { console.log('hi') }
  // the key is func, the value is the function
}

JSONの例:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

主な違い:

  • JSONのすべてのオブジェクトキーは文字列である必要があります。JavaScriptオブジェクトでは、キーは文字列または数値です。

  • JSONのすべての文字列は「二重引用符」で囲む必要があります。一方、Javascriptでは、単一引用符と二重引用符の両方を使用できます。JavaScriptオブジェクト表記に引用符がなくても、オブジェクトキーは暗黙的に文字列にキャストされます。

  • JSONでは、関数はオブジェクトの値として定義できません(これはJavaScript固有であるため)。JavaScriptでは、これは完全に合法です。

JSONオブジェクトのJavaScriptビルド:

JSONJSONJavascriptがランタイムで提供する組み込みオブジェクトを使用して、オブジェクトをJavascript に簡単に変換できます。例えば:

const Object = {
  property1: true,
  property2: false,
}; // creating object with JS object literal syntax

const JSON_object = JSON.stringify(Object);  // stringify JS object to a JSON string

console.log(JSON_object); // note that the (string) keys are in double quotes

const JS_object = JSON.parse(JSON_object);  // parse JSON string to JS object

console.log(JS_object.property1, JS_object.property2); 
// accessing keys of the newly created object


0

ここに1つの驚くべき違いがありますundefined。json では使用できず、未定義の値を持つすべてのオブジェクトフィールドは後に消えます。JSON.stringify

let object =  { "a": undefined } ;

let badJSON= '{ "a": undefined }';


console.log('valid JS object :', object );
console.log('JSON from object:', JSON.stringify(object) );
console.log('invalid json    :', JSON.parse(badJSON) );

🙈🙉🙊

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.