从 QueryString 到 JSON in JavaScript
From QueryString to JSON in JavaScript
如何将 var1=5&var2=Whosebug&var3=blah
之类的 QueryString 转换为 JSON 对象,例如:
{
"var1": "5",
"var2": "Whosebug",
"var3": "blah"
}
我正在关注 this,但我似乎遗漏了一些东西...如果需要,我也可以使用 jQuery。
你可以关注this:
$(function(){
// Values are not coerced.
var params = $.deparam.querystring();
debug.log( 'not coerced', params );
$('#deparam_string').text( JSON.stringify( params, null, 2 ) );
// Values are coerced.
params = $.deparam.querystring( true );
debug.log( 'coerced', params );
$('#deparam_coerced').text( JSON.stringify( params, null, 2 ) );
// Highlight the current sample query string link
var qs = $.param.querystring();
$('li a').each(function(){
if ( $(this).attr( 'href' ) === '?' + qs ) {
$(this).addClass( 'current' );
}
});
});
不确定您在提到的教程中遇到的问题是什么,因为您没有提供您的代码片段,但是查看该文章后,我能够为您制作一个完整的示例(在注释)。观察以下...
function QueryStringToJSON(str) {
var pairs = str.split('&');
var result = {};
pairs.forEach(function (pair) {
pair = pair.split('=');
var name = pair[0]
var value = pair[1]
if (name.length)
if (result[name] !== undefined) {
if (!result[name].push) {
result[name] = [result[name]];
}
result[name].push(value || '');
} else {
result[name] = value || '';
}
});
return (result);
}
var string = 'var1=5&var2=Whosebug&var3=blah';
var obj = QueryStringToJSON(string);
console.log(obj) // {var1: "5", var2: "Whosebug", var3: "blah"}
JSFiddle Link - 工作演示
在网络上四处搜索会让您找到 jQuery BBQ: $.deparam
作为解决此问题的方法。这很好,而且可能更健壮一些,但是您应该能够首先摆脱上面的代码,特别是如果您想要一个普通的解决方案(您总是应该这样做!!)
我通过手动解析对象本身解决了...
AjaxForm.prototype.getData = function() {
var data = this.$element.serializeArray();
var object = {};
for (var i = 0; i < data.length; i++) {
object[data[i].name] = data[i].value;
}
return JSON.stringify(object);
};
你可以这样做。
var query="var1=5&var2=Whosebug&var3=blah";
var arr=query.split("&");
result={};
for(i=0;i<arr.length;i++) {
k = arr[i].split('=');
result[k[0]] = (k[1] || '');
};
console.log(result);
所以这就是我在做什么
1)使用“&”拆分查询。你会得到数组 ["var1=5",....];
2)再次将数组的每个元素拆分为“=”。
3) 将键作为 arr[0],将值作为 arr[1],如果没有值则 ''。
注意:这是针对已解码的 URI。如果 URI 已编码,请先使用 decodeURIComponent() 函数对其进行解码。
可以一行写
Object.fromEntries(new URLSearchParams('var1=5&var2=Whosebug&var3=blah'))
可运行代码段:
const paramsString = "var1=5&var2=Whosebug&var3=blah";
const searchParams = new URLSearchParams(paramsString);
// Iterate the search parameters.
for (let p of searchParams) {
console.log(p);
}
console.log(Object.fromEntries(searchParams));
如何将 var1=5&var2=Whosebug&var3=blah
之类的 QueryString 转换为 JSON 对象,例如:
{
"var1": "5",
"var2": "Whosebug",
"var3": "blah"
}
我正在关注 this,但我似乎遗漏了一些东西...如果需要,我也可以使用 jQuery。
你可以关注this:
$(function(){
// Values are not coerced.
var params = $.deparam.querystring();
debug.log( 'not coerced', params );
$('#deparam_string').text( JSON.stringify( params, null, 2 ) );
// Values are coerced.
params = $.deparam.querystring( true );
debug.log( 'coerced', params );
$('#deparam_coerced').text( JSON.stringify( params, null, 2 ) );
// Highlight the current sample query string link
var qs = $.param.querystring();
$('li a').each(function(){
if ( $(this).attr( 'href' ) === '?' + qs ) {
$(this).addClass( 'current' );
}
});
});
不确定您在提到的教程中遇到的问题是什么,因为您没有提供您的代码片段,但是查看该文章后,我能够为您制作一个完整的示例(在注释)。观察以下...
function QueryStringToJSON(str) {
var pairs = str.split('&');
var result = {};
pairs.forEach(function (pair) {
pair = pair.split('=');
var name = pair[0]
var value = pair[1]
if (name.length)
if (result[name] !== undefined) {
if (!result[name].push) {
result[name] = [result[name]];
}
result[name].push(value || '');
} else {
result[name] = value || '';
}
});
return (result);
}
var string = 'var1=5&var2=Whosebug&var3=blah';
var obj = QueryStringToJSON(string);
console.log(obj) // {var1: "5", var2: "Whosebug", var3: "blah"}
JSFiddle Link - 工作演示
在网络上四处搜索会让您找到 jQuery BBQ: $.deparam
作为解决此问题的方法。这很好,而且可能更健壮一些,但是您应该能够首先摆脱上面的代码,特别是如果您想要一个普通的解决方案(您总是应该这样做!!)
我通过手动解析对象本身解决了...
AjaxForm.prototype.getData = function() {
var data = this.$element.serializeArray();
var object = {};
for (var i = 0; i < data.length; i++) {
object[data[i].name] = data[i].value;
}
return JSON.stringify(object);
};
你可以这样做。
var query="var1=5&var2=Whosebug&var3=blah";
var arr=query.split("&");
result={};
for(i=0;i<arr.length;i++) {
k = arr[i].split('=');
result[k[0]] = (k[1] || '');
};
console.log(result);
所以这就是我在做什么 1)使用“&”拆分查询。你会得到数组 ["var1=5",....];
2)再次将数组的每个元素拆分为“=”。
3) 将键作为 arr[0],将值作为 arr[1],如果没有值则 ''。
注意:这是针对已解码的 URI。如果 URI 已编码,请先使用 decodeURIComponent() 函数对其进行解码。
可以一行写
Object.fromEntries(new URLSearchParams('var1=5&var2=Whosebug&var3=blah'))
可运行代码段:
const paramsString = "var1=5&var2=Whosebug&var3=blah";
const searchParams = new URLSearchParams(paramsString);
// Iterate the search parameters.
for (let p of searchParams) {
console.log(p);
}
console.log(Object.fromEntries(searchParams));