122
window.onload = function(){
    var obj = '{
            "name" : "Raj",
            "age"  : 32,
            "married" : false
            }';

    var val = eval('(' + obj + ')');
    alert( "name : " + val.name + "\n" +
           "age  : " + val.age  + "\n" +
           "married : " + val.married );

}

In a code something like this, I am trying to create JSON string just to play around. It's throwing error, but if I put all the name, age, married in one single line (line 2) it doesn't. Whats the problem?

1

8 Answers 8

330

The way i do it is:

   var obj = new Object();
   obj.name = "Raj";
   obj.age  = 32;
   obj.married = false;
   var jsonString= JSON.stringify(obj);

I guess this way can reduce chances for errors.

Sign up to request clarification or add additional context in comments.

1 Comment

I think var obj = { name: 'Raj', age: 32, etc} is better.
97

Disclaimer: This is not an answer to follow for the best way how to create JSON in JavaScript itself. This answer mostly tackles the question of "what is the problem?" or WHY the code above does not work - which is a wrong string concatenation attempt in JavaScript and does not tackle why String concatenation is a very bad way of creating a JSON String in the first place.

See here for best way to create JSON: https://stackoverflow.com/a/13488998/1127761

Read this answer to understand why the code sample above does not work.

Javascript doesn't handle Strings over multiple lines.

You will need to concatenate those:

var obj = '{'
       +'"name" : "Raj",'
       +'"age"  : 32,'
       +'"married" : false'
       +'}';

You can also use template literals in ES6 and above: (See here for the documentation)

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;

8 Comments

Or put a \ at the end of each line in the literal.
For multi-line strings, instead of single or double quotes, you can use ` (back-tick character. to the left of the #1 key). These are called 'template literals'.
Definitely: don't settle for this answer and look to the others.
Template literals are ECMA Script 2015 Standard. This question and answer is from 2012 already. But I'll edit it in :)
Really? String concatenation from scratch is the best way to build JSON? I think the other answer should be the accepted answer.
|
67

The function JSON.stringify will turn your json object into a string:

var jsonAsString = JSON.stringify(obj);

In case the browser does not implement it (IE6/IE7), use the JSON2.js script. It's safe as it uses the native implementation if it exists.

Comments

37

This can be pretty easy and simple

var obj = new Object();
obj.name = "Raj";
obj.age = 32;
obj.married = false;

//convert object to json string
var string = JSON.stringify(obj);

//convert string to Json Object
console.log(JSON.parse(string)); // this is your requirement.

Comments

18

Use JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'

4 Comments

See also json2.js if you need to support older browsers.
Yes, here's a link to his GitHub project list: github.com/douglascrockford
@nepsdotin Douglas at SO is not Douglas Crockford, "to his GitHub"
Aah, missed that, nope, I'm not Crockford!
8

I think this way helps you...

var name=[];
var age=[];
name.push('sulfikar');
age.push('24');
var ent={};
for(var i=0;i<name.length;i++)
{
ent.name=name[i];
ent.age=age[i];
}
JSON.Stringify(ent);

Comments

0

The Answer from @Akhil is still the best for me. one user asked how to do nested properties, and I wanted to expand the solution like this:

var obj = new Object();
var nameobj = new Object();
nameobj.firstname = "Raj";
nameobj.lastname = "whatever";
obj.name = nameobj;
obj.age  = 32;
obj.married = false;
var jsonString= JSON.stringify(obj);

Comments

-6

json strings can't have line breaks in them. You'd have to make it all one line: {"key":"val","key2":"val2",etc....}.

But don't generate JSON strings yourself. There's plenty of libraries that do it for you, the biggest of which is jquery.

4 Comments

JSON can have line breaks, but JavaScript string literal syntax cannot.
interally within a string, yeah, but not between key/value pairs.
I think you're confusing JavaScript string literal syntax which cannot contain an unescaped newline character, and JSON markup. JSON markup can most certainly contain line breaks.
...paste the code in your question into jsonlint.com (without the etc.... of course). After clicking Validate, you'll see that it actually inserts newlines when it pretty-prints.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.