[英]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.