typescript 在 URLSearchParams 中使用 json 对象

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41135595/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-21 04:04:45  来源:igfitidea点击:

using json objects in URLSearchParams

javascriptjqueryangulartypescript

提问by A. L

Is it possible to somehow append json objects onto a URLSearchParams object?

是否可以以某种方式将 json 对象附加到 URLSearchParams 对象上?

So instead of:

所以而不是:

urlSearchParams.append('search', 'person');

it's:

它的:

urlSearchParams.append({search: "person"});


My answer courtesy of Darshak Gajjar's answer


我的回答由 Darshak Gajjar 提供

Can use json objects via this way:

可以通过这种方式使用 json 对象:

let test_this = [{"search": "person"}, { search: "another person"}];
var json = JSON.stringify(test_this);
urlSearchParams.append("myobj", json);

return this.http.post(this.post_url, urlSearchParams, options) //options being your own RequestOptions

回答by murtuza

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Something like this might work urlSearchParams = Object.assign(urlSearchParams, {search: "person"});

像这样的事情可能会奏效 urlSearchParams = Object.assign(urlSearchParams, {search: "person"});

EDIT: Alternate solution using vanilla javascript. Also, I thought URLSearchParams was just a normal js object, but in fact you have to use get, setand appendto access properties.

编辑:使用 vanilla javascript 的替代解决方案。另外,我认为 URLSearchParams 只是一个普通的 js 对象,但实际上您必须使用get,setappend访问属性。

var params = new URLSearchParams("a=apple&b=balloon");
var parametersToAdd = {c: "car", d: "duck"};
for(key in parametersToAdd)
  params.append(key, parametersToAdd[key]);

console.log(params.get('c'));
console.log(params.get('d'));
  

EDIT bis: .append()supports to re-use the same key/parameter name, while .set()would have overwritten a previous value.

编辑之二: .append()支持重复使用相同的键/参数名称,而.set()会覆盖以前的值。

回答by Darshak

May be using below code you can pass entire json object in URL Search param

可能正在使用以下代码,您可以在 URL Search 参数中传递整个 json 对象

var json = JSON.stringify(myObj);

this.http.get('url'+'?myobj='+encodeURIComponent(json))

回答by Paul Samsotha

There's no API for that. You just need to enumerate over the properties and append them manually, for example using the following function:

没有 API。您只需要枚举属性并手动附加它们,例如使用以下函数:

function appendParams(params: URLSearchParams, obj: any) {
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      params.append(key, obj[key])
    }
  }
}

appendParams(urlSearchParams, { search: 'person' });

回答by Ricky Levi

Want to share my answer for Angular2with the option of sending an ArrayThis is how I use this getfunction:

想通过Angular2发送选项分享我的答案Array这是我使用此get功能的方式:

this.get('/api/database', {
   'age': [1,2,3,4]
})

And the service is something like:

服务类似于:

get(url, _params = {}) {
    let params = this._processParams(_params);

    return this.http.get(url, params).toPromise();
}

_processParams(obj: any) {
        /* Convert this
            { age: [1,2,3] }
           To:
              param.append('age', 1);
              param.append('age', 2);
              param.append('age', 3);
        */        
        let params = new URLSearchParams();

        for (let key in obj) {
            for (let index in obj[key] ) {                
                params.append(key, obj[key][index]);
            }
        }

        return {
            search: params
        };
    }

回答by jimmont

var url = new URL('/', location.origin);
console.log(url.href); // https://stackoverflow.com/
Object.entries({this:4,that:1}).forEach((item)=>{ 
// note .set replaces while .append will duplicate params
    url.searchParams.append(...item);
});
console.log(url.href); // https://stackoverflow.com/?this=4&that=1