Javascript 花括号内的节点JS字符串

Javascript 花括号内的节点JS字符串,javascript,Javascript,运行它: 我创建了上面的代码片段来演示我遇到的问题。我收到一个输入字符串,可以是“on:true”、“on:false”、“bri:250”、“sat:13”等。将此数据发布到服务器时,上面的格式被视为“desireResult” 但是,当在变量中获取字符串(如“on:true”)并将其放置在{}中时,它似乎总是创建一个以变量名为键、字符串本身为值的字典 有人能解释一下为什么会这样,以及如何避开它吗 有人能解释为什么会这样吗 因为语法{foo}的意思是“创建一个对象,给它一个名为foo的属性,给

运行它:

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

但是,当在变量中获取字符串(如“on:true”)并将其放置在{}中时,它似乎总是创建一个以变量名为键、字符串本身为值的字典

有人能解释一下为什么会这样,以及如何避开它吗

有人能解释为什么会这样吗

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

如何避开它

解析数据。显式分配它

首先拆分
上的字符串。然后删除空白。然后测试第二个值是数字或关键字。依此类推


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

有人能解释为什么会这样吗

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

如何避开它

解析数据。显式地分配它

首先在
上拆分字符串。然后删除空白。然后测试第二个值是数字或关键字。等等



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

您可以使用JSON.parse,但您需要向他提供有效的JSON。 您需要具有以下格式的字符串:

  // 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);

使用JSON.parse(“{”on:true}”)将返回所需的对象。

您可以使用JSON.parse,但需要向他提供有效的JSON。 您需要具有以下格式的字符串:

  // 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);

使用JSON.parse('{“on”:true}')将返回所需的对象。

一个(不可靠的)快捷方式可能是
JSON.parse('{'+inputString+'}')@JaredSmith-不起作用。
上的
周围没有引号字符。这一点很好。在这种情况下,让我们将残暴系数提高到11:
eval(“{'+inputString+'}”)。特别是因为OP是从其他地方得到的:)@JaredSmith-危险。非常危险。我建议编写一个合适的解析器,而不是故意使用这样的黑客。我认为“暴行”涵盖了这一点,并将其设置为11:)一个(不可靠的)快捷方式可能是
JSON.parse(“{+inputString+}”)@JaredSmith-不起作用。
上的
周围没有引号字符。这一点很好。在这种情况下,让我们将残暴系数提高到11:
eval(“{'+inputString+'}”)。特别是因为OP是从其他地方得到的:)@JaredSmith-危险。非常危险。我建议编写一个合适的解析器,而不是故意使用这样的黑客。我认为这是“暴行”所涵盖的,并将其设置为11:)接受其他人的评论并将其作为自己的答案是一个以“plag”开头,以“arism”结尾的词。当然,伙计,你是这背后的天才。把别人的评论作为你自己的答案,这是一个以“plag”开头,以“arism”结尾的词。当然,伙计,你是这背后的天才。你也可以在输入之前做一些装饰。编辑:我假设了节点,我意识到这是一个很大的假设。我想留下这个评论以防万一。你也可以在输入之前做一些装饰。编辑:我假设了节点,我意识到这是一个很大的假设。我会留下这个评论以防万一。