I am trying to learn JSON, i learned that any javascript object with the key in double quotes are considered as JSON object.
And i constructed this object
JSON.parse() accepts a string and converts to JSON object, it doesnt take a javascript object as the parameter. Refer JSON.parse() It could give you the results as follows
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
and do know that If the string to parse is not valid JSON, a SyntaxError exception is thrown. so this is how you get syntax error on jstr1 (It is not a JSON string)
You have some missunnderstanting for JSON.parse
JSON.parse takes string and parse it to JAVASCRIPT object
JSON.stringify takes an object and parse it to a string
thats why when you ran the following
JSON.parse('{"a":"b"}')
it worked because it expects a json string
but when you ran
JSON.parse({"a":"b"})
it didnt because the object was coverted to string which is
"[object Object]"
and here is the error where "[object Object]" is not valid syntax at letter o
You are creating a Javascript Object. If you want a JSON-string from it, use JSON.stringify.
So
var myObj = {mykey: "my value"}
,myObjJSON = JSON.stringify(myObj);
Based on comments:
There is no such thing as a JSON Object. There are JSON-strings, which can be parsed to Javascript Objects. Javascript Objects can be stringified to JSON strings. Within a JSON-string keys and values are quoted. So the result of the above is a string containing '{"mykey":"my value"}'.
Try parsing myObjJSON in your browser console (using: JSON.parse(myObjJSON)) and you get: Object {mykey: "my value"}.
This code
var jstr1 = {"mykey": "my value"};
creates a JavaScript object using the Object Literal Notation.
For the difference between the Object Literal Notation and JSON (JON is short for JavaScript object notation), see here: What is the difference between JSON and Object Literal Notation?
It makes logically no sense to pass this data to JSON.parse().
The difference to your first variant (var jstr = '{"mykey": "my value"}';) is that it creates a 'raw' string. You cannot access anything on that string except the raw character sequences. Using JSON.parse() gives us a usable form (object) created from the string.
SyntaxError: Unexpected token o
This comes from the automatic string conversion of jstr1:
jstr1.toString();
// gives us [object Object]
// ----------↑
How about this:
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
then you will get: {ecomm_pagetype:"cart",ecomm_prodid:"123",ecomm_totalvalue:"19.99"}