javascript - 如何在 javascript 中将 JSON 修改为特定的 SQL 查询格式?
问题描述
我需要将 JSON 修改为具有 SQL 查询格式的值的 JSON。为了更好地解释。
{
"Assets": {
"ASSOCIATES_NAME": ["David", "Philip"],
"CAR_NAME": ["Verron"]
}
, "Product":{"SELLER_NAME": ["XXXXX"]}
}
结果应该是将 json 值作为 sql 查询保留原样。所以结果查询将是:
{
Assets: "(ASSOCIATES_NAME = 'David' OR ASSOCIATES_NAME = 'Philip') AND CAR_NAME = 'Verron'",
Product: "SELLER_NAME = 'XXXXX'"
}
我尝试了一些东西,但我无法弄清楚。下面是:
console.log(Object.entries(a).map(x => {return {
[x[0]]: `${Object.keys(x[1])} = '${Object.values(x[1])}'`,
}}))
但是我仍然需要弄清楚如何对数组的各个值进行分组。任何优雅的基于 ES6 的解决方案?请大家帮我解决这个问题。TIA
解决方案
这是一种方法,Array.reduce
用于迭代外部对象属性和Array.map
内部对象属性以生成OR
andAND
表达式:
const json = `{
"Assets": {
"ASSOCIATES_NAME": ["David", "Philip"],
"CAR_NAME": ["Verron"]
}
, "Product":{"SELLER_NAME": ["XXXXX"]}
}`
const params = JSON.parse(json);
const whereItems = Object.entries(params)
.reduce((c, [k, v]) => {
c[k] = Object.entries(v)
.map(([param, value]) => '(' + value.map(v => param + " = '" + v + "'").join(' OR ') + ')')
.join(' AND ');
return c;
}, {});
console.log(whereItems);
请注意,它确实会()
在单个比较(例如(SELLER_NAME = 'XXXXX')
)周围产生不必要的影响,如果您真的想摆脱它们,只需将这些字符添加到value.length > 1
.
推荐阅读
- windows - PowerShell:为已启动的应用程序池运行 Start-WebAppPool 会导致问题吗?
- javascript - React:使用出生日期输入作为死亡日期的最小值
- reactjs - 在 Material-UI 的自动完成中使用“use-places-autocomplete”钩子?
- r - 使用 fable.prophet 时的超参数优化?
- c - 是否可以在 C 中将指针分配给数组或将数组的地址更改为指针地址?
- python - 使用 stdin.read() 从控制台读取值时出现问题
- linux - 作为指定用户从另一个内部调用一个 bash 函数
- typescript - nuxt 将变量分配给这个
- javascript - 无法读取未定义的属性“insertOnMatch”-TypeScript
- python - 更新 mongodb 集合中的列