如何将HttpParams值作为JSON对象获取?

时间:2018-02-22 15:56:21

标签: javascript angular

我使用Angular 5和HttpInterceptors 我已经知道我可以从HttpParams via several methods获得我想要的每个值。

另外 - 如果我想查看所有值,我可以使用.toString()方法

params = new HttpParams()
    .set('page', '2')
    .set('sort', 'name');

console.log(params.toString()); //Returns page=2&sort=name

但在我的情况下,我发送json对象作为参数:

{
  a:1 , b:[1,2,3] , c:[{...}]
}

我使用拦截器来记录请求参数,但是当我JSON.stringify(req.Params)时,我得到:

Params={
    "updates": null,
    "cloneFrom": null,
    "encoder": {},
    "map": {}
}

没有公开价值。

没有希望将参数看作常规表单帖子参数 - (这将是非常不清楚的),但作为我发送它的对象。< / p>

问题:

如何从拦截器中的请求对象中提取参数,但是以json格式:

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
    {
       JSON.stringify( req.params)  // <--- ?? doesn't yield the params.
   }

2 个答案:

答案 0 :(得分:2)

如果您不喜欢返回编码字符串的方法toString(),其中键值对(由=分隔)由&分隔,您可以编写自己的方法这将在您想要使用的某些数据中转换存储在Map中的数据。

例如:

const params = new HttpParams()
  .set('page', '2')
  .set('sort', 'name');

const paramsArray = params.keys().map(x => ({ [x]: params.get(x) }));

console.log(JSON.stringify(paramsArray));

它类似于toString方法中使用的方法 https://github.com/angular/angular/blob/master/packages/common/http/src/params.ts#L177-L186

<强> Ng-run Example

答案 1 :(得分:0)

您实际要求的是JSON对象。所以这就是你得到这样一个对象的方式:

const params = new HttpParams()
  .set('page', '2')
  .set('sort', 'name');

const paramsObject = params.keys().reduce((object, key) => {
    object[key] = params.get(key)
    return object
}, {})
console.log(paramsObject)
// And json if you really want
const json = JSON.stringify(paramsObject)