передать объекты и массивы JSON в качестве параметров в http-вызовы Angular 2 - PullRequest
0 голосов
/ 06 июля 2018

Я хочу передать приведенный ниже объект JSON и массив в параметр HTTP-запроса в мой проект Angular 5.

param1:

{"param_1":"abc","param_2":"xyz","param_3":"123"}

param2:

[{"f_key_1":"id1","f_key_2":"12","f_key_3":"xyz1"},{"f_key_1":"id2","f_key_2":"13","f_key_3":"xyz2"}]

Используя следующий код для создания строки из объекта и массива

public updateParam(dataParam: any) {
    let params = new URLSearchParams();
    for (let field in dataParam) {
        if (typeof (dataParam[field]) == 'object' || dataParam[field] instanceof Array) {
            params.set(field, JSON.stringify(dataParam[field]));
        } else {
            params.set(field, dataParam[field]);
        }
    }

    return this.http.patch('param/update', params.toString())
        .map((res: Response) => res.json())
        .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}

Я думал, что это правильный способ сделать это, но он не работает. Причина в том, что он передает [объект Object] для param1 и [[объект Object], [объект Object]] для значения param2. Я могу решить это, создав строку в JSON-подобной структуре и передав ее в качестве параметра. Но это не стандартный способ сделать это.

Есть ли стандартный способ решения проблемы?

1 Ответ

0 голосов
/ 06 июля 2018

Измените часть if-else, как показано ниже. Добавьте JSON.stringify ко всей переменной:

if (typeof (dataParam[field]) == 'object' || dataParam[field] instanceof Array) {
    params.set(JSON.stringify(field), JSON.stringify(dataParam[field]));
} else {
    params.set(JSON.stringify(field), JSON.stringify(dataParam[field]));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...