【问题标题】:Converting string "{a:2, b:4}" into object {a:2, b:4} [duplicate]将字符串“{a:2,b:4}”转换为对象{a:2,b:4} [重复]
【发布时间】:2020-06-17 17:18:48
【问题描述】:

我想将此字符串"{a:2, b:4}" 转换为对象{a:2, b:4}

我试过JSON.parse("{a:2, b:4}") 没有结果。

我得到的真实数据有点复杂,因为公司数据不能在这里发布。

在JS中有什么方法可以实现吗?

【问题讨论】:

  • JSON.parse 不起作用的原因是因为那不是 JSON。如果你的字符串是{"a":2, "b":4},那么你可以使用 JSON.parse
  • 有办法吗?当然,您总是可以使用eval(请不要这样做)。否则,您需要以某种方式将其转换为有效的 JSON 或手动将其解析为对象。
  • 数据从何而来?它是用户提供的对象还是完全由您自己构建的?
  • 感谢@AlbertoRivera 的评论.. 会检查

标签: javascript


【解决方案1】:

let parsedObject = JSON.parse('{"a":2, "b":4}')
console.log(parsedObject)

JSON.parse('{"a":2, "b":4}') 可以工作。

【讨论】:

  • 如何将原始数据转成JSON?
  • 这行得通.. 谢谢,但我正在获取"{a:2, b:4}" 格式的数据,实际数据有点复杂,无法像上面那样更改数据。但我会尝试一次..
【解决方案2】:

你可以使用eval函数:

s = '{a:2, b:4}'
eval('('+s+')')
// returns {a:2, b:4}

别忘了把你的对象放在(...)

【讨论】:

  • 这样工作的eval(`(${data})`)
  • 抛开安全性不谈,这假定数据遵循 JavaScript 代码的语法(我们不知道)并且没有可以触发函数调用的结构。
  • 实际上数据只是简单的普通对象,具有多个键和值.
【解决方案3】:

除非您知道格式的语法,否则您无法编写可靠的解析器,但是对于您共享的简单测试用例,您可以执行以下操作(为简洁起见省略了错误检查):

const input = '{a:2, b:4}';
const parsed = input.match(/^\{([a-z]+):(\d+),\s*([a-z]+):(\d+)\}$/);
const output = {
  [parsed[1]]: parsed[2],
  [parsed[3]]: parsed[4]
}
console.log(output, typeof output);

【讨论】:

  • 真实复杂的数据,估计这个方法不太方便
  • 绝对不是。但是,问题实际上并不是复杂性,而是可变性。数据可以包含什么其他
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
相关资源
最近更新 更多