Javascript 花括号内的节点JS字符串
运行它: 我创建了上面的代码片段来演示我遇到的问题。我收到一个输入字符串,可以是“on:true”、“on:false”、“bri:250”、“sat:13”等。将此数据发布到服务器时,上面的格式被视为“desireResult” 但是,当在变量中获取字符串(如“on:true”)并将其放置在{}中时,它似乎总是创建一个以变量名为键、字符串本身为值的字典 有人能解释一下为什么会这样,以及如何避开它吗 有人能解释为什么会这样吗 因为语法Javascript 花括号内的节点JS字符串,javascript,Javascript,运行它: 我创建了上面的代码片段来演示我遇到的问题。我收到一个输入字符串,可以是“on:true”、“on:false”、“bri:250”、“sat:13”等。将此数据发布到服务器时,上面的格式被视为“desireResult” 但是,当在变量中获取字符串(如“on:true”)并将其放置在{}中时,它似乎总是创建一个以变量名为键、字符串本身为值的字典 有人能解释一下为什么会这样,以及如何避开它吗 有人能解释为什么会这样吗 因为语法{foo}的意思是“创建一个对象,给它一个名为foo的属性,给
{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”结尾的词。当然,伙计,你是这背后的天才。你也可以在输入之前做一些装饰。编辑:我假设了节点,我意识到这是一个很大的假设。我想留下这个评论以防万一。你也可以在输入之前做一些装饰。编辑:我假设了节点,我意识到这是一个很大的假设。我会留下这个评论以防万一。