Why JSON.parse fails with this array-like string - javascript

I tried to JSON parse this
let string = `["\"test1, "\"test2"]`;
let array = JSON.parse(string);
console.log(array[0]);
It's fairly simple enough but I don't understand what's error message is supposed to tell
Uncaught SyntaxError: Unexpected token t in JSON at position 3

you are using template string to create a string.
it doesnt need a escape character for double quotes ".
type this:
let string = `["test1", "test2"]`;
let array = JSON.parse(string);
console.log(array[0])
you need a escape character for " only when you are using normal string. like this:
let string = "[\"test1\", \"test2\"]";
let array = JSON.parse(string);
console.log(array[0])
im not good at english.hope useful

Related

Javascript - Parse a stringified arrays of strings

I have a string like so :
a= "['url1','url2','url3']"
coming from the server I want to convert it to array like :
arr = ["url1","url2","url3"]
but JSON.parse does not seems to be working and gives following error:
SyntaxError: Unexpected token ' in JSON at position 1
Thanks in advance.
You need to replace the single quotes with double quotes. An easy way to achieve this can be by replacing them with escaped quotes like this:
let validJSON = a.replace(/'/g, "\"")
JSON.parse(validJSON)
Your string needs to be in single quotes for JSON.parse to work in this example, also string representation in json uses double quotes as per standard.
JSON.parse('["url1","url2","url3"]')
Try to use this code:
a = "['url1','url2','url3']"
urls = a.split(',')
arr = urls.map(url => url.replace(/'|\[|\]/g, ''))
console.log(arr) // ["url1", "url2", "url3"]
https://jsfiddle.net/z1frh8ys/

Converting a string to array in javascript without eval()

I want to implement a counter for unique articles visited in my website, basically storing the ids of the articles the user has visited in a cookie. My issue is that the recovered value is, of course, a string. How would you convert a string that looks like this "['test','b','c']" to an array? Using eval is not advised, right?
Use JSON.parse to turn a string into an array:
const string = '["test","b","c"]';
const arr = JSON.parse(string);
console.log(arr[0]);
Note that you need to have proper JSON formatting, though - keys and non-numeric values need to have double quotes. Easiest to serialize automatically with JSON.stringify:
const arr = ["test","b","c"];
const str = JSON.stringify(arr);
console.log(str);
If you absolutely cannot change the single-quotes in the string you're working with originally, then use replace to turn it into something parseable:
const str = "['test','b','c']";
const jsonFormattedStr = str.replace(/'/g, '"');
const arr = JSON.parse(jsonFormattedStr);
console.log(arr[1]);
While using JSON.parse() is the correct way to convert data strings to usable objects, the string in your question is not valid JSON syntax. Namely the single quotes will result in an unexpected token error.
If your only issue is the quotes, then it becomes trivial to prepare your data for parsing:
var str = "['test','b','c']"
// convert to double quotes
str = str.split('\'').join('"')
// now parse
var arr = JSON.parse(str)
console.log(arr)
You need to convert the quotes to double quotes, and then use JSON.parse
let string = "['test','b','c']";
// replace quotes with double quotes
let stringFixed = string.replace(/'/g, '"');
// parse the string
let result = JSON.parse( stringFixed );

JavaScript json.parse string error

I want to parse this string to an array
var string= "['one','two']";
var result= JSON.parse(string);
It throws an error
`Unexpected token ' in JSON at position 1'
I believe my approach is right I just can't figure out why its throwing that error.
You should use double quotes:
var string = '["one", "two"]';
You can't use single quote in a JSON string.
Just make it like this
var string= '["one","two"]';
var result= JSON.parse(string);
Json standard requires that the string have double quotes inside.

How do JSON.parse() and escape characters work in JavaScript?

Suppose I have an object variable:
var obj = {
key: '\"Hello World\"'
}
Then I tried parse it to string by using JSON.stringify in Chrome devtools console:
JSON.stringify(obj) // "{"key":"\"Hello World\""}"
I get the result "{"key":"\"Hello World\""}". Then I give it to a string
var str = '{"key":"\"Hello World\""}'
At least I try to convert it back to obj:
JSON.parse(str);
but the browser tell me wrong Uncaught SyntaxError
What confused me is why this is wrong? I get the string from an origin object and I just want turn it back.
How can I fix this problem? If I want do the job like convert obj to string and return it back, how can I do?
You're tried to convert your JSON into a string literal by wrapping it in ' characters, but \ characters have special meaning inside JavaScript string literals and \" gets converted to " by the JavaScript parser before it reaches the JSON parser.
You need to escape the \ characters too.
var str = '{"key":"\\"Hello World\\""}'
That said, in general, it is better to not try to embed JSON in JavaScript string literals only to parse them with JSON.parse in the first place. JSON syntax is a subset of JavaScript so you can use it directly.
var result = {"key":"\"Hello World\""};
try:
var str = '{"key":"\\"Hello World\\""}';

Convert array formatted strings to object

I got
[[["汽車","car","Qìchē",""]],[["名詞",["汽車","車","轎車","車輛","車廂"],[["汽車",["car","automobile","auto"],,0.26497361],["車",["car","vehicle","lathe","machine","rook","turn"],,0.21967085],["轎車",["car","bus"],,0.020115795],["車輛",["vehicle","car"],,0.013611027],["車廂",["car"],,0.0042828997]]]],"en",,[["汽車",[4],0,0,1000,0,1,0]],[["car",4,[["汽車",1000,0,0],["車",0,0,0],["轎車",0,0,0],["車輛",0,0,0],["車廂",0,0,0]],[[0,3]],"car"]],,,[["en"]],27]
this from google translator
However I tried
JSON.parse(xhr.responseText);
It return an error Unexpected token
The problem is that this string contains multiple commas making your json invalid.
You could try to replace it for a single one before parsing
var x = '[[["汽車","car","Qìchē",""]],[["名詞",["汽車","車","轎車","車輛","車廂"],[["汽車",["car","automobile","auto"],,0.26497361],["車",["car","vehicle","lathe","machine","rook","turn"],,0.21967085],["轎車",["car","bus"],,0.020115795],["車輛",["vehicle","car"],,0.013611027],["車廂",["car"],,0.0042828997]]]],"en",,[["汽車",[4],0,0,1000,0,1,0]],[["car",4,[["汽車",1000,0,0],["車",0,0,0],["轎車",0,0,0],["車輛",0,0,0],["車廂",0,0,0]],[[0,3]],"car"]],,,[["en"]],27]'
.replace(/,{2,}/g, ",") // 2 or more replace for 1
JSON.parse(x);
Or if you have access to whatever is sending this string fix the output.
First you should remove an extra [] brackets by replacing that.
ex,
[["汽車","car","Qìchē",""]]
should be:
["汽車","car","Qìchē",""]
EDIT: you can refer to this answer: Parse Google Translate Json C#
You should try:
var str = '[[["汽車","car","Qìchē",""]],[["名詞",["汽車","車","轎車","車輛","車廂"],[["汽車",["car","automobile","auto"],,0.26497361],["車",["car","vehicle","lathe","machine","rook","turn"],,0.21967085],["轎車",["car","bus"],,0.020115795],["車輛",["vehicle","car"],,0.013611027],["車廂",["car"],,0.0042828997]]]],"en",,[["汽車",[4],0,0,1000,0,1,0]],[["car",4,[["汽車",1000,0,0],["車",0,0,0],["轎車",0,0,0],["車輛",0,0,0],["車廂",0,0,0]],[[0,3]],"car"]],,,[["en"]],27]';
var objstr = $.parseJSON(str);

Categories

Resources