Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将URL转换为json_Javascript_Json_Url - Fatal编程技术网

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

我似乎找不到这个问题的答案。。如何在javascript中将URL参数字符串转换为JSON?我的意思是问,是否有像这样的内置功能或一个单行程序可以完成这项工作

例如:


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'}