我想为我的网站中访问过的独特文章实现一个计数器,基本上将用户访问过的文章的ID存储在cookie中。我的问题是恢复的值当然是一个字符串。如何将看起来像这样"['test','b','c']"
的字符串转换为数组?不建议使用 eval,对吧?
使用 JSON.parse
将字符串转换为数组:
const string = '["test","b","c"]';
const arr = JSON.parse(string);
console.log(arr[0]);
请注意,您需要具有正确的 JSON 格式 - 键和非数字值需要有双引号。最容易用 JSON.stringify 自动序列化:
const arr = ["test","b","c"];
const str = JSON.stringify(arr);
console.log(str);
如果您绝对无法更改最初使用的字符串中的单引号,请使用 replace
将其转换为可解析的内容:
const str = "['test','b','c']";
const jsonFormattedStr = str.replace(/'/g, '"');
const arr = JSON.parse(jsonFormattedStr);
console.log(arr[1]);
虽然使用 JSON.parse()
是将数据字符串转换为可用对象的正确方法,但问题中的字符串不是有效的 JSON 语法。即单引号将导致unexpected token
错误。
如果您唯一的问题是引号,那么准备数据以进行解析变得微不足道:
var str = "['test','b','c']"
// convert to double quotes
str = str.split(''').join('"')
// now parse
var arr = JSON.parse(str)
console.log(arr)
您需要将引号转换为双引号,然后使用 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 );