有没有办法将字符串转换为 JavaScript 对象?

时间:2021-02-21 21:08:02

标签: javascript

我对 JavaScript 有点陌生,所以我想知道如何转换这样的东西:

var names = "{ guy:'Henry' guy2:'Joe' guy3:'Bob' }"

从一个字符串到一个实际的对象,然后访问键的值。 我尝试使用:

names = eval(names)
console.log(names.guy)

我会得到未定义 如果我尝试:

console.log(names)

我只会得到对象的第一个值,即 'Henry' 请有人帮我解决这个问题,如果我的问题不够解释,我可以说得更清楚

2 个答案:

答案 0 :(得分:0)

有相当多的假设,最重要的是给定的字符串有一个固定的模式,就像在 OP 中一样,那么像这样的东西可能适合需要:

var names = "{ guy:'Henry' guy2:'Joe' guy3:'Bob' }"


names = names
  .replace(/^{/, '') // remove leading '{'
  .replace(/}$/, '') // reomve closing '}'
  .trim() // trim surrounding empty spaces
  .split(' ') // split out key:value pairs
  .map((s) => s.split(':')) // "parse" supposed key:value pairs
  .reduce((acc, [k, v]) => {
    acc[k] = eval(v) // suppose the value portion is always quoted
    return acc
  }, {})

console.log(names.guy)

但是如果您可以选择输入,请确保它以有效的 JSON 字符串形式出现,如评论部分所建议的那样

答案 1 :(得分:-1)

正如您所提到的,您的变量是一个字符串,您可以使用 let v = JSON.parse(names) 将其解析为一个对象。然后您可以使用 console.log(names.guy) 输出值。如果您想将对象转换为字符串,您可以使用 JSON.stringify()