首页 > 解决方案 > 如何在 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

标签: javascriptsql

解决方案


这是一种方法,Array.reduce用于迭代外部对象属性和Array.map内部对象属性以生成ORandAND表达式:

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.


推荐阅读