[英]Infer correct data type from query string parameters
我想从查询字符串的参数推断类型(使用Javascript)。
范例网址:
http://example.com/some/path/here/?someString=Hey&someNumber=20
我使用了几个软件包( query-string
和simple-query-string
),如下所示:
queryString.parse(request.url)
其中request.url
是上面的URL。 这给出了以下内容:
{
"someString":"Hey",
"someNumber":"20"
}
上面的someNumber
是string
类型。 理想的结果是:
{
"someString":"Hey",
"someNumber":20
}
其中someNumber
是integer
类型。
我想要integer
类型的原因是因为我正在对指定每个命名参数允许的类型的参数执行JSONSchema验证。
我知道我可以转换这些实例,但是我更希望它可以从包装中获得,因为它很像是在重新发明轮子。
这应该可以解决问题。 您可能会添加更多/不同的正则表达式测试,以补充当前已进行的简单数字检查(例如,检测日期,美元金额,电话号码等)。
var exampleurl = "http://example.com/some/path/here/?someString=Hey&someNumber=20" function getQueryStringData(url){ var data = url.split('?')[1].split('&'), numberRgx = /^\\d+(\\.\\d+)?$/ return data.reduce(function(obj, t){ var pair = t.split('='), key = pair[0], val = pair[1] obj[key] = numberRgx.test(val) ? parseFloat(val) : val return obj }, {}) } var obj = getQueryStringData(exampleurl) console.log(obj) document.getElementById('output').textContent = JSON.stringify(obj)
<div id="output"></div>
这是一种类型转换对象属性的方法。 如果字符串本身是表达式中的特殊匹配项之一,则JSON.parse,否则尝试Number,否则保持原样。
function cast (o) {
var result = {};
for(var prop in o) { if(o.hasOwnProperty(prop)) {
var val = o[prop];
if (typeof val === 'object') return o[prop] = cast(val);
result[prop] = /^(true|false|null|undefined)$/.test(val) ? JSON.parse(val) : Number(val) || val;
}}
return result;
}
cast( { a: '123', b: 'null', c: 'abc' } )
返回{a: 123, b: null, c: "abc"}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.