15

この質問に対する答えが見つからないようです..URLパラメータ文字列をJavaScriptでJSONに変換するにはどうすればよいですか? このような組み込み関数があるかどうか、または仕事をすることができるワンライナーがあるかどうかを尋ねるつもりですか?

例:

some=params&over=here=>{"some":"params","over":"here"}

4

7 に答える 7

26

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

デモ: http://jsfiddle.net/jAGN5/

于 2013-07-05T07:21:21.587 に答える
6

これを試して :

var str = 'some1=param&some2=param2';

JSON.parse('{"' + decodeURI(str).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"').replace(/\s/g,'') + '"}')

// {some1: "param1", some2: "param2"}
于 2016-02-10T09:02:10.460 に答える
1

この関数を使用してみてください:

// 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;
}
于 2013-07-05T07:25:37.133 に答える
0

satpal回答を使用してHtml.BeginForm@Html.TextBoxForなどで動作する素敵な Razor to JSON パイプラインを提供しました。

更新された 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;
}

余分な呼び出しは、おそらくドロップダウンルックアップreplaceを介して、テキスト ボックスで取得した文字に対するものです。magicSuggestこのdecodeURIComponent呼び出しは、最初の % からクリーンアップします。

次のようなブロックで呼び出します。

    var serialized = $("#saveForm").serialize();
    var params = getUrlVars(serialized);

私が持っている Razor 構文は次のようになります。

@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

これは、ajax を介して Web サービスにスローできる js オブジェクトの ASP.Net MVC コントロール内および ASP.Net MVC コントロールを介して作成された一連のデータを取得する優れた方法を提供します。

于 2017-01-10T15:48:42.700 に答える