2

I am trying to parse a string into an object. I have looked at the jQueryparseJSON documentation at the following link I've also included the jquery library so I know it's not that.

This is my code so far

var str = "{'val1': 1, 'val2': 2, 'val3': 3}";
var obj = jQueryparseJSON( str );
alert(obj.val1);

In Firebug I am getting the following errors:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

I know the solution is more than likely very simple, but I have been repeatedly overlooking it.

1

4 Answers 4

6

The test string in your sample code is not valid JSON:

var str = '{"val1": 1, "val2": 2, "val3": 3}';
var obj = jQuery.parseJSON( str );
alert(obj.val1);

Now, if you're doing all this because some service is making that object available as a JSON string, it's probably the case that jQuery will do the parsing step for you anyway. If you're just trying to include an object literal into your JavaScript code, then there's no reason to involve the JSON services at all:

var obj = { val1: 1, val2: 2, val3: 3 };

creates an object.

Note that JSON syntax is stricter than JavaScript object literal syntax. JSON insists that property names be quoted with double-quote characters, and of course values can only be numbers, strings, booleans, or null.

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

2 Comments

but how can you add an element to your obj variable. for example val4: 4
@BlastFire obj.val4 = 4;
3

Your string is not valid JSON. Object keys must be surrounded with double quotes, not single quotes.

var str = '{"val1": 1, "val2": 2, "val3": 3}';
var obj = jQuery.parseJSON(str);
alert(obj.val1);

DEMO

Comments

0
function str2json (str, val, obj) {
var obj = str.indexOf("'") != -1 
          ? JSON.parse(str.replace(/'/g, "\"")) 
          : JSON.parse(str);
    return (val === undefined ? obj /* JSON.stringify(obj) */ : obj[val])
};

str2json("{'val1': 1, 'val2': 2, 'val3': 3}", "val1"); // `1`

str2json("{'val1': 1, 'val2': 2, 'val3': 3}") 
// `obj` : `[object Object]` ,
// `JSON.stringify(obj)` : `{"val1":1,"val2":2,"val3":3}`

jsfiddle http://jsfiddle.net/guest271314/n8jLG/

2 Comments

This is going to cause problems when there are single quotes embedded within string values or in the keys themselves.
@cookiemonster Ok, good point. Should answer be withdrawn ? Or, try to fix by assessing quotes more thoroughly ? Where case str, or var, is actual string appearing as arguments[0] above ? Havnt viewed a key which included single quotes; example in the wild ? Thanks
0

You have a typo error in your code :

here var obj = jQueryparseJSON( str );

should be var obj = jQuery.parseJSON( str );

Comments

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.