Как я могу превратить объект JSON, то есть { username: "john", password: "1234" }, в строковый запрос OData в функции с использованием машинописного текста? Мне не удалось найти библиотеку для этого (Angular 6). Вот моя попытка:
function ConvertToODataString (json: Object) {
let ret_str: string = "";
for (let key in json) {
ret_str += (key + " = " + json[key] + "&");
}
if (ret_str) {
ret_str = ret_str.substr(0, ret_str.length - 1); // remove last &
}
return ret_str;
}
Кто-нибудь знает способ лучше? На данный момент мой json не является многоуровневым.
@ConnorsFan JSON-объект / экземпляр
Думаю, мне наверное нужно что-то более похожее на $filter=username eq 'john' and password eq '1234'.

Функция JSON.parse.
Пример:
var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
json = { "name":"John", "age":30, "city":"New York"};
var obj = JSON.parse(json+'');
JSON.parse преобразует строку в объект, противоположный тому, что мне нужно.
Спасибо за попытку, но JSON.stringify не будет форматировать строку для запросов OData.
Вы можете использовать для ... в для перечисления свойств объекта, добавления каждой пары ключ / значение в массив и объединения значений с Array.join:
function convertObjectToQuery(obj: Object): string {
let values = new Array<string>();
for (let prop in obj) {
values.push(`${prop} eq '${obj[prop]}'`);
}
return encodeURI("$filter = " + values.join(" and "));
}
См. этот stackblitz для демонстрации.
Хорошая идея, хотя я думаю, что мой вопрос, вероятно, следует сформулировать по-другому, потому что я запрашиваю эти значения, поэтому мне нужен оператор $filter и другой синтаксис.
Я изменил ответ и стек в соответствии с вашими комментариями. Отредактируйте вопрос, если это тот формат, который вам нужен.
Я решил использовать вместо него модуль HttpParms:
import { HttpParams } from "@angular/common/http";
const params = new HttpParams()
.set("$filter", "Username eq '" + parameters["Username"] + "' and Password eq '" + parameters["Password"] + "'")
.set("$count", "true");
console.info(params.toString());
Когда вы говорите «объект JSON», вы начинаете с экземпляра объекта или со строки JSON?