javascript - 如何在 JSON.stringify 中保留数字字段

标签 javascript marathon

我有代码获取表单字段并将它们转换为适合传递给 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/

相关文章:

javascript - PushManager 不请求移动设备上的许可

javascript - React.js 中的混合和复制方法

docker - 如何在一个mesos从节点上运行多个docker容器?

elasticsearch - 为动态 Elasticsearch 集群持久化节点数据的策略

apache-kafka - 如何从 DCOS Kafka 中删除主题?

javascript - 有没有一种方法可以使用 Angular 中的路线来自动滚动到 ng-repeat 中的数据

javascript - html中的嵌套消息

docker - 马拉松任务永无止境

azure - Marathon 提供错误缩放应用程序,称 "please specify data in JSON format"

javascript - Node 骑士评估内部的变量未定义