我有代码获取表单字段并将它们转换为适合传递给 REST API(特别是马拉松 REST API)的 JSON 字符串。问题是 JSON.stringify 将所有表单字段值都用双引号引起来,即使是数字,也会导致 ajax 调用失败。这是我的代码生成的字符串:
{"id":"basic-1","cpus":"0","mem":"32","instances":"1","cmd":"while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done"}
mem、cpus 和 instances 值不应该用双引号引起来,因为它们是数字。
data: JSON.stringify($('form').MytoJson());
MytoJson 是一个序列化表单字段的函数。那工作正常。问题是 JSON.stringify 将引号放在键和所有值周围,包括数值,这导致 ajax 调用失败。
JSON.stringify 函数有两个参数。第一个参数是替换函数,可以是函数或数组。考虑这个替换函数:
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
JSON.stringify($('form').MytoJson(), replacer);
我想将此替换函数修改为不引用 数值。我想知道我是否使用 HTML5 表单属性来区分字符串和数字表单字段?考虑这个表单域:
<input id="cpus" type="number" name="cpus" value="0.1" />
如何在替换函数中使用该字段具有属性 type="number" 的事实?我想修改替换函数,使其在表单字段的类型为数字时不引用值。
最佳答案
我不是 100%,但我想这个问题是由读取表单字段值的代码引起的 - 即它将值读取为字符串(它们是)。
您需要做的是将任何数值转换为实际的 JS Number
。试试下面的 replacer
函数:
function replacer( key, value ) {
var ret = ( value === value * 1 )
? value * 1
: value;
return ret;
}
这应该检查每个值是否为数字,如果是,则将其转换为 Number
关于javascript - 如何在 JSON.stringify 中保留数字字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703780/