【问题标题】:Node JS String Inside Curly Brackets大括号内的节点 JS 字符串
【发布时间】:2018-02-22 04:33:09
【问题描述】:
  // My input String
  // Could be on : true, on : false, bri : 255, etc, etc
  var inputString = 'on : true'
  console.log(inputString);
  var wrongResult = { inputString }
  console.log(wrongResult);

  // The result that I am trying to achieve
  var desiredResult = {
    on : true
  }
  console.log(desiredResult);

运行它:https://repl.it/LCDt/4

我创建了上面的代码 sn-p 来演示我遇到的问题。我收到一个输入字符串,可能是“on:true”、“on:false”、“bri:250”、“sat:13”等。当将此数据发布到服务器时,有效的格式是上面被视为“desireResult”。

但是,当在变量中获取字符串(例如 'on : true')并将其放在 {} 中时,似乎总是创建一个字典,其中变量名作为键,字符串本身作为值.

有人可以解释为什么会这样以及如何解决它吗?

【问题讨论】:

  • 您也可以load the string as a module 事先对输入进行一些修饰。编辑:我假设节点,我意识到这是一个很大的假设。会留下这个评论以防万一。

标签: javascript


【解决方案1】:

谁能解释一下为什么会这样

因为语法{ foo } 的意思是“创建一个对象,给它一个名为foo 的属性,给该属性foo 变量的值。

如何解决

解析数据。明确分配。

首先拆分: 上的字符串。然后删除空白区域。然后test是第二个值是数字还是关键字。以此类推。


如果您收到的数据是标准格式,这会更容易。然后你可以使用现有的解析器。如果您可以控制输入:将其更改为有效 JSON,然后使用 JSON.parse

【讨论】:

  • 一个(不可靠的)快捷方式可能是JSON.parse('{' + inputString + '}');
  • @JaredSmith — 不起作用。 on 没有被引号字符包围。
  • 好点。在这种情况下,让我们将暴行系数提高到 11:eval('{' + inputString + '}');。特别是因为 OP 是从其他地方获取它的 :)
  • @JaredSmith — 危险。非常危险。我建议编写一个适当的解析器,而不是故意使用这样的技巧。
  • 思想被“暴行”覆盖并将其提高到 11 :)
【解决方案2】:

您可以为此使用 JSON.parse,但您需要为他提供有效的 JSON。 你需要有一个字符串形式:

    {"on":true}

使用 JSON.parse('{"on":true}') 会返回你想要的对象。

【讨论】:

  • 拿别人的cmets贴出来作为自己的答案是一个以'plag'开头并以'arism'结尾的词。
  • 当然,伙计,你是这背后的天才。
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2016-09-08
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多