如何用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对内部对象属性进行循环,以生成ORAND表达式:

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上添加这些字符即可。

投票支持@nik的回答,这只是初学者的另一种方法。

f3 = function(key, arr){
var result = arr.map(function(e) {
return(`${key}='${e}'`)
})
if(result.length > 1)
return(`(${result.join(' AND ')})`)
else
return(result)
}
f2 = function(json) {
var result = []
for(const key in json) {
result.push(f3(key, json[key]))
}
return(result.join(' OR '))
}
f = function(json) {
var result = {}
for(const key in json) {
result[key] = f2(json[key])
}
return(result)
}

通过json 呼叫f