Javascript 将URL转换为json
我似乎找不到这个问题的答案。。如何在javascript中将URL参数字符串转换为JSON?我的意思是问,是否有像这样的内置功能或一个单行程序可以完成这项工作 例如:Javascript 将URL转换为json,javascript,json,url,Javascript,Json,Url,我似乎找不到这个问题的答案。。如何在javascript中将URL参数字符串转换为JSON?我的意思是问,是否有像这样的内置功能或一个单行程序可以完成这项工作 例如: some=params&over=here=>{“some”:“params”,“over”:“here”}您可以创建一个返回JSON对象的方法 var params = getUrlVars('some=params&over=here'); console.log(params); function getUrlVa
some=params&over=here
=>{“some”:“params”,“over”:“here”}
您可以创建一个返回JSON对象的方法
var params = getUrlVars('some=params&over=here');
console.log(params);
function getUrlVars(url) {
var hash;
var myJson = {};
var hashes = url.slice(url.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
myJson[hash[0]] = hash[1];
// If you want to get in native datatypes
// myJson[hash[0]] = JSON.parse(hash[1]);
}
return myJson;
}
var-params=getUrlVars('some=params&over=here');
控制台日志(params);
函数getUrlVars(url){
var散列;
var myJson={};
var hashes=url.slice(url.indexOf('?'))+1.split('&');
for(var i=0;i
演示:尝试使用此功能:
// Returns an object with elements "name: value" with data ftom URL (the "name=value" pairs)
function getDataUrl(url) {
// From: http://coursesweb.net/javascript/
var url_data = url.match(/\?([^#]*)/i)[1]; // gets the string between '?' and '#'
// separate the data into an array, in case the are multiple pairs name=value
var ar_url_data = url_data.split('&');
// traverse the array, and adds into an object elements name:value
var data_url = {};
for(var i=0; i<ar_url_data.length; i++) {
var ar_val = ar_url_data[i].split('='); // separate name and value from each pair
data_url[ar_val[0]] = ar_val[1];
}
return data_url;
}
//返回包含元素“name:value”和数据ftom URL的对象(“name=value”对)
函数getDataUrl(url){
//发件人:http://coursesweb.net/javascript/
var url#u data=url.match(//\?([^#]*)/i)[1];//获取“?”和“#”之间的字符串
//如果是多对名称=值,则将数据分隔为一个数组
var ar_url_data=url_data.split('&');
//遍历数组,并将名称:value添加到对象元素中
var data_url={};
对于(var i=0;i如果您要查找的是一个单行程序,则下划线库有一个名为object
的漂亮函数,它获取一个对数组并从中构建一个对象:
> _.object(["some","param"],["over","here"])
{some: "param", over: "here"}
如果使用下划线,可以按如下方式从查询字符串中对对象的构造进行一行操作:
> var s = 'some=param&over=here';
> _.object(s.split('&').map(function(p){return p.split('=');}))
{some: "param", over: "here"}
现在,如果您只需要JavaScript对象,那么就完成了。您在问题中说您需要JSON,因此下一步非常简单:
> JSON.stringify(_.object(s.split('&').map(function(p){return p.split('=');})))
"{\"some\": \"param\", \"over\": \"here\"}"
这是一个
如果不使用下划线,则始终可以编写自己的实用函数
这一行有点难看,但Firefox22有一些即将推出的ES6功能,如数组理解和箭头,因此将来代码可以更加紧凑,例如
JSON.stringify(_.object(s.split('&').map(p => p.split('='))))
甚至
JSON.stringify(_.object([p.split('=') for (p of s.split('&'))]))
或者只需使用可读的for循环并创建自己的函数即可。:)尝试以下方法:
var str = 'some1=param&some2=param2';
JSON.parse('{"' + decodeURI(str).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"').replace(/\s/g,'') + '"}')
// {some1: "param1", some2: "param2"}
我使用的是提供了一个很好的JSON管道,它可以与Html.BeginForm
,@Html.TextBoxFor
等一起使用
更新后的getUrlVars函数如下所示:
function getUrlVars(url) {
var hash;
var myJson = {};
var hashes = url.slice(url.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
var value = decodeURIComponent(hash[1]);
value = value.replace("[\"", "");
value = value.replace("\"]", "");
value = value.replace(/\^.*/, "");
myJson[hash[0]] = value;
}
return myJson;
}
var serialized = $("#saveForm").serialize();
var params = getUrlVars(serialized);
@using (Html.BeginForm("SaveNewAddress", "Internal", FormMethod.Post, new { @Id = "saveForm" }))
{
@Html.ValidationSummary()
<table style="width: 100%; margin: 0 auto; padding: 10px">
<tr>
<td colspan="2">
<label>Is this a Liliputian Address?</label>
</td>
<td colspan="4" style="font-size: 1.1em">
<div style="float: left; margin-left: 10px">
<label class="label_check">
@Html.RadioButton("IsLiliputian", "Yes", true, new { @id = "IsLiliputianYes", @style = "width:30px" })
</label>
Yes
</div>
...etc
我使用的Razor语法如下所示:
function getUrlVars(url) {
var hash;
var myJson = {};
var hashes = url.slice(url.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
var value = decodeURIComponent(hash[1]);
value = value.replace("[\"", "");
value = value.replace("\"]", "");
value = value.replace(/\^.*/, "");
myJson[hash[0]] = value;
}
return myJson;
}
var serialized = $("#saveForm").serialize();
var params = getUrlVars(serialized);
@using (Html.BeginForm("SaveNewAddress", "Internal", FormMethod.Post, new { @Id = "saveForm" }))
{
@Html.ValidationSummary()
<table style="width: 100%; margin: 0 auto; padding: 10px">
<tr>
<td colspan="2">
<label>Is this a Liliputian Address?</label>
</td>
<td colspan="4" style="font-size: 1.1em">
<div style="float: left; margin-left: 10px">
<label class="label_check">
@Html.RadioButton("IsLiliputian", "Yes", true, new { @id = "IsLiliputianYes", @style = "width:30px" })
</label>
Yes
</div>
...etc
@使用(Html.BeginForm(“SaveNewAddress”,“Internal”,FormMethod.Post,new{@Id=“saveForm”}))
{
@Html.ValidationSummary()
这是莆田的地址吗?
@RadioButton(“IsLiliputian”,“Yes”,true,新的{@id=“IsLiPutianyes”,“style=“width:30px”})
对
等
这提供了一种很好的方法,可以在js对象中通过ASP.Net MVC控件创建一组数据,我可以通过ajax向Web服务抛出这些数据
var url = require('url')
var your_json = url.parse( your_url, true );
我是从函数getFormData(data)得到这个的{
数据=数据。替换('%20','');
var jsonObj={};
var sep=数据分割('&');
对于(变量i=0;i
您使用jquery?如果是,请尝试使用jquery、JSON.parse(this.yourURLString)或jquery.parseJSON(this.yourURLString);返回所需对象的类型。您是在询问纯字符串到字符串的转换问题吗?还是正在使用node.js之类的JavaScript服务器,并且输入了一些参数,希望将这些参数转换为对象,然后再转换为JSON?@RayToal我刚刚发现jquery中带有ajaxSetup的ajax预设数据将被覆盖如果给定的数据是url类型的字符串而不是对象,则不会添加到本地ajax函数数据属性,我正在寻找一种简单的方法将该字符串转换为json,以便不会覆盖我的默认数据。我想我只需添加一个自定义函数,我在下面的答案中得到了建议。明白。Stapal的答案是fine和可读性。如果您对一行程序感兴趣,我添加了一个答案只是为了好玩。我要求一行程序,但无论如何感谢函数,+rep:)
这不会得到同一参数的所有值。例如,如果URL是'some=params&over=here&over=there',它不会返回“over”的列表它将'isParam=true'转换为{isParam:'true'}