193

How do you make JS think that a string is JSON ?

I have a function which only works if JSON object is passed to it. If I pass a string to it, with same format as JSON, it doesn't work. So I want to make that function think that the string passed to it is a JSON. The string is indeed in the JSON format.

I also tried the following. I inputted the string through Ajax , with "handle as" parameter as "JSON", and then when I passed the result to the function it works.

So I deduced the problem is not with the string. How do I convert this string to JSON? If i get same string through ajax request and then passing it to function works, whereas directly passing it doesn't work.

The string is as follows:

  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..
5
  • 1
    possible duplicate of Safely turning a JSON string into an object Commented Jun 11, 2012 at 8:55
  • 4
    Your title is misleading. Based on the content of your question I'd rather say you want to convert a string containing JSON into a JavaScript object/array. Commented Jun 11, 2012 at 9:04
  • OK i solved it. There was a \n in the string. Now only have to figure out how to use JSON.parse with this. Commented Jun 12, 2012 at 11:59
  • Ok i fixed it. Goto jsonlint.com and put your string there. If it says its correct, then you can use JSONParse to achieve the same. Commented Jun 14, 2012 at 5:34
  • In case anyone reads this, the title is supposed to be "converting a JSON string into an object" Commented Dec 4, 2019 at 9:27

10 Answers 10

424
var obj = JSON.parse(string);

Where string is your json string.

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

7 Comments

This is not working. It is throwing an error "SyntaxError: JSON.parse: unexpected character" . There is nothing wrong with the string as when i get the same string through a ajax request and handle it as "JSON", no problem occurs.
please post your acutal JSON string
{ "data": [ { id": - you are missing a double quote here, i.e. starting double quote of id
When I get it through Ajax it works as then it handles the response as JSON . So I think I have to convert this to a JSON object..
I ended up going to jsonlint.com, and making sure my Json is right
|
28

You can use the JSON.parse() for that.

See docs at MDN

Example:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);

3 Comments

This is not working. It is throwing an error "SyntaxError: JSON.parse: unexpected character" . There is nothing wrong with the string as when i get the same string through a ajax request and handle it as "JSON", no problem occurs.
@Zer0: You should update your question with how you are trying it along with your json string.
@Zer0: We can only answer to the best of our knowledge. You say you have a JSON string, we answer accordingly. It seems your string is different, if you'd post it, we can answer taking this into account. If you ask a question about coding, then code/data is indispensable .
9

I had the same problem with a similar string like yours

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

The problem here is the structure of the string. The json parser wasn't recognizing that it needs to create 2 objects in this case. So what I did is kind of silly, I just re-structured my string and added the [] with this the parser recognized

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

Hope it helps,

If anyone has a more elegant approach please share.

2 Comments

In your code above, you've constructed myString incorrectly. It's not a string, and it's incorrectly formatted JSON. Your second line would then become redundant. Here's what it should be: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' I know this is quite an old post, but I thought I'd add some clarity in case anyone finds it.
I solved my issue using $.parseJSON where JSON.parse was not working and throwing an error JSON.parse is not a function
5
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );

link:-

http://api.jquery.com/jQuery.parseJSON/

Comments

4

Simply use eval function.

var myJson = eval(theJsibStr);

1 Comment

eval is evil, be very careful to security with this approach
4

convert the string to HashMap using Object Mapper ...

new ObjectMapper().readValue(string, Map.class);

Internally Map will behave as JSON Object

Comments

2
var Data=[{"id": "name2", "label": "Quantity"}]

Pass the string variable into Json parse :

Objdata= Json.parse(Data);

1 Comment

In your example, Data is already an object, so there would be no need to parse it. You would need some quotes surrounding all your Data in order to make it a string.
2

Let's us consider you have string like

example : "name:lucy,age:21,gender:female"

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

`

Comments

2

JSON.parse() is your friend. Here's an example:

let obj = JSON.parse(yourString)
console.log(typeof obj); // prints 'object' assuming your string is correctly formatted

Comments

1

JSON.parse() function will do.

or

Using Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );

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.