簡體   English   中英

從查詢字符串參數推斷正確的數據類型

[英]Infer correct data type from query string parameters

我想從查詢字符串的參數推斷類型(使用Javascript)。

范例網址:

http://example.com/some/path/here/?someString=Hey&someNumber=20

我使用了幾個軟件包( query-stringsimple-query-string ),如下所示:

queryString.parse(request.url)

其中request.url是上面的URL。 這給出了以下內容:

{
    "someString":"Hey",
    "someNumber":"20"
}

上面的someNumberstring類型。 理想的結果是:

{
    "someString":"Hey",
    "someNumber":20
}

其中someNumberinteger類型。

我想要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM