【问题标题】:JSON to OData String for Query用于查询的 JSON 到 OData 字符串
【发布时间】:2019-03-23 16:13:35
【问题描述】:

如何使用 typescript 在函数中将 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 不是多层次的。

【问题讨论】:

  • 当你说“一个 JSON 对象”时,你是从对象实例开始还是从 JSON 字符串开始?
  • @ConnorsFan JSON 对象/实例
  • 我想我可能需要更多类似$filter=username eq 'john' and password eq '1234' 的东西。

标签: json angular typescript serialization odata


【解决方案1】:

您可以使用for ... in 枚举对象属性,将每个键/值对添加到数组中,并将值与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 "));
}

请参阅this stackblitz 以获取演示。

【讨论】:

  • 好主意,虽然我认为我的问题可能应该用不同的措辞,因为我正在查询这些值,所以我需要 $filter 运算符和不同的语法。
  • 我根据您的 cmets 修改了答案和 stackblitz。如果这是您需要的格式,请编辑问题。
【解决方案2】:

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 查询格式化字符串。
【解决方案3】:

我决定改用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.log(params.toString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多