我对 JavaScript 有点陌生,所以我想知道如何转换这样的东西:
var names = "{ guy:'Henry' guy2:'Joe' guy3:'Bob' }"
从一个字符串到一个实际的对象,然后访问键的值。 我尝试使用:
names = eval(names)
console.log(names.guy)
我会得到未定义 如果我尝试:
console.log(names)
我只会得到对象的第一个值,即 'Henry' 请有人帮我解决这个问题,如果我的问题不够解释,我可以说得更清楚
答案 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()
。