2013-09-05 9 views
9

私はJSONを学びたいと思っています。二重引用符で囲んだjavascriptオブジェクトはすべてJSONオブジェクトと見なされます。引用符を付けたJSONオブジェクト

と私は、このオブジェクト

var jstr1 = {"mykey": "my value"}; 

を構築しかし、私はJSON.parse(jstr1)を使用して解析しようとすると、私は次のエラーを得ました。スクリーンショットを参照してください。

enter image description here

しかし、私はこの

var jstr = '{"mykey": "my value"}';, 

を解析しようとすると、私は成功を持って、スクリーンショットを参照してください。私はこれと混同しました。なぜこれが起こるのか教えてください。 2つの形式の違いは何ですか?

とするとき、私はそれがすべての助けを事前にjstrまたはjstr1

感謝の形態であるかどうか、のように見えるだろうか、いずれかのサービスからの応答としてJSONを得ました。

+0

@ComFreekサイスとして、あなたはすでにあなたがそれを解析から得られることを期待しない何 'Hash'を持っている場合は? – fguillen

+1

最初はオブジェクトです。 2番目の文字列は正確なJSONです。 JSON.parseはオブジェクトではなく文字列で機能します。 – user568109

答えて

19

。 JSON文字列が必要な場合は、JSON.stringifyを使用してください。

ので

var myObj = {mykey: "my value"} 
    ,myObjJSON = JSON.stringify(myObj); 

コメントに基づいて: JSONオブジェクトのようなものはありません。 JSON文字列は、parsedとJavascriptオブジェクトの間にあります。 Javascriptオブジェクトは、JSON文字列にstringifiedにすることができます。 JSON文字列の中にキーと値が引用されます。したがって、上記の結果は文字列には'{"mykey":"my value"}'が含まれています。

ブラウザコンソール(JSON.parse(myObjJSON)を使用)でmyObjJSONを解析してください:Object {mykey: "my value"}を取得してください。

+0

@Kooilnc私の答えでは、mykeyがJSON標準で指定された二重引用符ではありませんが、JSON文字列に変換されます。 "var myObj = {mykey:" my value "}"引用符をつけてもしなくてもmykeyでオブジェクトを文字列化すると、同じ結果が得られます。 –

+0

@MohamedHussain * JavaScript *でキーを二重引用符で囲む必要はありません。 – ComFreek

+0

@ComFreekあなたは正しいです。キーを引用符で囲む必要はありませんが、JSONでは二重引用符で囲む必要がありました。私はこれをhttp://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-andから学んだ-object-literal-notation?lq = 1 –

6

このコード

var jstr1 = {"mykey": "my value"}; 

オブジェクトリテラル表記を使用してJavaScriptオブジェクトを作成します。 オブジェクトリテラル表記JSON差について
(JONがJavaScriptオブジェクト表記の略である)、ここで参照:What is the difference between JSON and Object Literal Notation?

JSON.parse()にこのデータを渡すために、論理的に意味をなさない。

最初の変種(var jstr = '{"mykey": "my value"}';)との違いは、生の文字列を作成することです。文字列以外の文字列にはアクセスできません。 JSON.parse()を使用すると、文字列から作成された使用可能なフォーム(オブジェクト)が得られます。

SyntaxError: Unexpected token o

これはjstr1の自動文字列変換から来ている:あなたはJavascript Objectを作成している

jstr1.toString(); 
// gives us [object Object] 
// ----------↑ 
3

あなたは以下の

JSON.parse('{"a":"b"}') 

を実行したとき、それはJSON文字列

を期待するので、それは働いていたが、あなたは

を実行したときに、なぜ JSON.parse

JSON.parse takes string and parse it to JAVASCRIPT object 
JSON.stringify takes an object and parse it to a string 

thatsのためのいくつかのmissunnderstantingを持っています

JSON.parse({"a":"b"}) 

オブジェクトを文字列にcovertedたので、それは

"[object Object]" 

であり、ここで「[オブジェクトのオブジェクト]」の文字で有効な構文ではありませんo

2

JSON.parse()がA受け入れる誤りであるdidntのJSONオブジェクトに変換すると、javascriptオブジェクトをパラメータとして使用しません。それは

JSON.parse('{}'); // {} 
JSON.parse('true'); // true 
JSON.parse('"foo"'); // "foo" 
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] 
JSON.parse('null'); // null 

を次のようにあなたに結果を与えることができるし、解析する文字列が有効なJSON、SyntaxError例外がスローされていない場合はことを知っていますJSON.parse()を参照してください。ので、これはどのようにこの程度

-3

(それはJSON文字列ではありません)あなたはjstr1に構文エラーを取得する方法である:、 "カート" ecomm_prodid:その後、あなたが得る

MarahJSONObject gtp = new MarahJSONObject() 
    gtp.put("ecomm_prodid", "123") 
    gtp.put("ecomm_pagetype", "cart") 
    gtp.put("ecomm_totalvalue", "19.99") 

String r = gtp.toString() 
    gtp.keySet().each { 
     r = r.replace(/"${it}"/, it) 
    } 
    println r 

: {ecomm_pagetype」を123" 、ecomm_totalvalue: 『19.99』}

+1

その有効なコメントはありません。 –

+0

何がこれですか?私はこれが手元の問題をどのように解決するのか見ていない – Frogboxe

関連する問題