JSON.parse exptected ',' or '}' Any idea? both do not work

Both JSON.parse and eval functions are errors. I checked JSON using http://jsonlint.com/ any idea what to do?

<script type="text/javascript"> var obj = JSON.parse('{ "defaults": { "recordtext": "View", "emptyrecords": "No records to view", "loadtext": "Loading...", "pgtext": "Page" }, "search": { "caption": "Search...", "Find": "Find", "Reset": "Reset", "odata": [ "equal", "not equal", "less", "less or equal", "greater", "greater or equal", "begins with", "does not begin with", "is in", "is not in", "ends with", "does not end with", "contains", "does not contain" ], "groupOps": [ { "op": "AND", "text": "all" }, { "op": "OR", "text": "any" } ], "matchText": " match", "rulesText": " rules" }, "edit": { "addCaption": "Add Record", "editCaption": "Edit Record", "bSubmit": "Submit", "bCancel": "Cancel", "bClose": "Close", "saveData": "Data has been changed! Save changes?", "bYes": "Yes", "bNo": "No", "bExit": "Cancel", "msg": { "required": "Field is required", "number": "Please, enter valid number", "minValue": "value must be greater than or equal to ", "maxValue": "value must be less than or equal to", "email": "is not a valid e-mail", "integer": "Please, enter valid integer value", "date": "Please, enter valid date value", "url": "is not a valid URL. Prefix required (\"http://\" or \"https://\")", "nodefined": " is not defined!", "novalue": " return value is required!", "customarray": "Custom function should return array!", "customfcheck": "Custom function should be present in case of custom checking!" } }, "view": { "caption": "View Record", "bClose": "Close" }, "del": { "caption": "Delete", "msg": "Delete selected record(s)?", "bSubmit": "Delete", "bCancel": "Cancel" }, "nav": { "edittext": "", "edittitle": "Edit selected row", "addtext": "", "addtitle": "Add new row", "deltext": "", "deltitle": "Delete selected row", "searchtext": "", "searchtitle": "Find records", "refreshtext": "", "refreshtitle": "Reload Grid", "alertcap": "Warning", "alerttext": "Please, select row", "viewtext": "", "viewtitle": "View selected row" }, "col": { "caption": "Select columns", "bSubmit": "Ok", "bCancel": "Cancel" }, "errors": { "errcap": "Error", "nourl": "No url is set", "norecords": "No records to process", "model": "Length of colNames <> colModel!" }, "formatter": { "integer": { "thousandsSeparator": " ", "defaultValue": "0" }, "number": { "decimalSeparator": ".", "thousandsSeparator": " ", "decimalPlaces": 2, "defaultValue": "0.00" }, "currency": { "decimalSeparator": ".", "thousandsSeparator": " ", "decimalPlaces": 2, "prefix": "", "suffix": "", "defaultValue": "0.00" }, "date": { "dayNames": [ "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], "monthNames": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], "AmPm": [ "am", "pm", "AM", "PM" ], "srcformat": "Ymd", "newformat": "m/d/Y", "masks": { "ISO8601Long": "Ymd H:i:s", "ISO8601Short": "Ymd", "ShortDate": "n/j/Y", "LongDate": "l, F d, Y", "FullDateTime": "l, F d, Y g:i:s A", "MonthDay": "F d", "ShortTime": "g:i A", "LongTime": "g:i:s A", "SortableDateTime": "Ymd\\TH:i:s", "UniversalSortableDateTime": "Ymd H:i:sO", "YearMonth": "F, Y" }, "reformatAfterEdit": false }, "baseLinkUrl": "", "showAction": "", "target": "", "checkbox": { "disabled": true }, "idName": "id" }, "emptyrecords": "test" }'); var obj2 = eval ( '(' + '{ "defaults": { "recordtext": "View", "emptyrecords": "No records to view", "loadtext": "Loading...", "pgtext": "Page" }, "search": { "caption": "Search...", "Find": "Find", "Reset": "Reset", "odata": [ "equal", "not equal", "less", "less or equal", "greater", "greater or equal", "begins with", "does not begin with", "is in", "is not in", "ends with", "does not end with", "contains", "does not contain" ], "groupOps": [ { "op": "AND", "text": "all" }, { "op": "OR", "text": "any" } ], "matchText": " match", "rulesText": " rules" }, "edit": { "addCaption": "Add Record", "editCaption": "Edit Record", "bSubmit": "Submit", "bCancel": "Cancel", "bClose": "Close", "saveData": "Data has been changed! Save changes?", "bYes": "Yes", "bNo": "No", "bExit": "Cancel", "msg": { "required": "Field is required", "number": "Please, enter valid number", "minValue": "value must be greater than or equal to ", "maxValue": "value must be less than or equal to", "email": "is not a valid e-mail", "integer": "Please, enter valid integer value", "date": "Please, enter valid date value", "url": "is not a valid URL. Prefix required (\"http://\" or \"https://\")", "nodefined": " is not defined!", "novalue": " return value is required!", "customarray": "Custom function should return array!", "customfcheck": "Custom function should be present in case of custom checking!" } }, "view": { "caption": "View Record", "bClose": "Close" }, "del": { "caption": "Delete", "msg": "Delete selected record(s)?", "bSubmit": "Delete", "bCancel": "Cancel" }, "nav": { "edittext": "", "edittitle": "Edit selected row", "addtext": "", "addtitle": "Add new row", "deltext": "", "deltitle": "Delete selected row", "searchtext": "", "searchtitle": "Find records", "refreshtext": "", "refreshtitle": "Reload Grid", "alertcap": "Warning", "alerttext": "Please, select row", "viewtext": "", "viewtitle": "View selected row" }, "col": { "caption": "Select columns", "bSubmit": "Ok", "bCancel": "Cancel" }, "errors": { "errcap": "Error", "nourl": "No url is set", "norecords": "No records to process", "model": "Length of colNames <> colModel!" }, "formatter": { "integer": { "thousandsSeparator": " ", "defaultValue": "0" }, "number": { "decimalSeparator": ".", "thousandsSeparator": " ", "decimalPlaces": 2, "defaultValue": "0.00" }, "currency": { "decimalSeparator": ".", "thousandsSeparator": " ", "decimalPlaces": 2, "prefix": "", "suffix": "", "defaultValue": "0.00" }, "date": { "dayNames": [ "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], "monthNames": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], "AmPm": [ "am", "pm", "AM", "PM" ], "srcformat": "Ymd", "newformat": "m/d/Y", "masks": { "ISO8601Long": "Ymd H:i:s", "ISO8601Short": "Ymd", "ShortDate": "n/j/Y", "LongDate": "l, F d, Y", "FullDateTime": "l, F d, Y g:i:s A", "MonthDay": "F d", "ShortTime": "g:i A", "LongTime": "g:i:s A", "SortableDateTime": "Ymd\\TH:i:s", "UniversalSortableDateTime": "Ymd H:i:sO", "YearMonth": "F, Y" }, "reformatAfterEdit": false }, "baseLinkUrl": "", "showAction": "", "target": "", "checkbox": { "disabled": true }, "idName": "id" }, "emptyrecords": "test" }' + ')'); </script> 
+4
source share
2 answers

You do not escape quotes if you need another backslash;

It is not right,

 JSON.parse('{ "fails" : "\"http://\" or \"https://\"" }') 

It should be like this:

 JSON.parse('{ "passes" : "\\"http://\\" or \\"https://\\"" }') 
+4
source

When something is really JSON, it basically means that you can write this:

 var xx = <that-thing-you-validated>; 

However, JSON.parse() expects a formatted JSON string that is not the same. Note:

 var yy = {text: "hello \"world\""}; console.log(JSON.stringify(yy)); // output: "{"text":"hello \"world\""}" 

Ok, so copy / paste this and replace the outer double quotes with single quotes (because we don’t want to hide the double quotes inside).

 console.log('{"text":"hello \"world\""}'); // output: {"text":"hello "world""} 

Hi, what happened to the backslash ?! To create a string literal in JavaScript that contains a backslash, this also needs to be escaped :

 console.log('{"text":"hello \\"world\\""}'); // output: {"text":"hello \"world\""} 

Does it work now?

 JSON.parse('{"text":"hello \\"world\\""}'); // output: Object 

Yes!:)

+2
source

All Articles