替换对象内对象中的字符串

问题描述 投票:0回答:1

我有一个对象

const mainString = {
  bool: {
    should: [{
      nested: {
        path: "employee",
        query: {
          bool: {
            must: [NAME_QUERIES]
          }
        }
      }
    }, NICK_NAME_QUERIES],
    minimum_should_match: 1
  }
}

其中

NAME_QUERIES
NICK_NAME_QUERIES
是对象,由用户输入。 例如:

NAME_QUERIES = [{
  multi_match: {
    query: "fname1 lname1",
    fields: ["employee.name"],
    type: "phrase"
  }
}, {
  multi_match: {
    query: "fname2 lname2",
    fields: ["employee.name"],
    type: "phrase"
  }
}]

NICK_NAME_QUERIES = [{
  multi_match: {
    query: "fname1 lname1",
    fields: ["employee.nickName"],
    type: "phrase"
  }
}, {
  multi_match: {
    query: "fname2 lname2",
    fields: ["employee.nickName"],
    type: "phrase"
  }
}]

如何替换

NAME_QUERIES
中的
NICK_NAME_QUERIES
mainString

我想要

mainString
的 o/p,如下所示

{
  bool: {
    should: [{
      nested: {
        path: "employee",
        query: {
          bool: {
            must: [{
              multi_match: {
                query: "fname1 lname1",
                fields: ["employee.name"],
                type: "phrase"
              }
            }, {
              multi_match: {
                query: "fname2 lname2",
                fields: ["employee.name"],
                type: "phrase"
              }
            }]
          }
        }
      }
    }, {
      multi_match: {
        query: "fname1 lname1",
        fields: ["employee.nickName"],
        type: "phrase"
      }
    }, {
      multi_match: {
        query: "fname2 lname2",
        fields: ["employee.nickName"],
        type: "phrase"
      }
    }],
    minimum_should_match: 1
  }
}

NAME_QUERIES
可以包含N个multi_match,在上面的例子中只添加了2个

我尝试直接在字符串中添加

NAME_QUERIES
NICK_NAME_QUERIES
,但它添加了 [] 。 我还尝试使用 jsonStringify,然后使用该变量,然后它为所有字段添加双引号,例如(“multi_match”),而我想要的键没有引号。

有没有简单的方法来替换主字符串中不带 [] 的它们?

javascript string elasticsearch javascript-objects
1个回答
-3
投票

您需要通过将占位符字符串 NAME_QUERIESNICK_NAME_QUERIES 替换为实际的 JSON 对象来构建 JSON 对象

// Actual JSON string
const NAME_QUERIES_JSON = '[{"multi_match":{"query":"fname1 lname1","fields":["employee.name"],"type":"phrase"}},{"multi_match":{"query":"fname2 lname2","fields":["employee.name"],"type":"phrase"}}]';

const NICK_NAME_QUERIES_JSON = '[{"multi_match":{"query":"fname1 lname1","fields":["employee.nickName"],"type":"phrase"}},{"multi_match":{"query":"fname2 lname2","fields":["employee.nickName"],"type":"phrase"}}]';

// Convert JSON strings to JavaScript objects
const NAME_QUERIES = JSON.parse(NAME_QUERIES_JSON);
const NICK_NAME_QUERIES = JSON.parse(NICK_NAME_QUERIES_JSON);

const mainString = {
"bool": {
    "should": [
        {
            "nested": {
                "path": "employee",
                "query": {
                    "bool": {
                        "must": NAME_QUERIES
                    }
                }
            }
        },
        ...NICK_NAME_QUERIES
    ],
    "minimum_should_match": 1
}
};

console.log(JSON.stringify(mainString, null, 2));

© www.soinside.com 2019 - 2024. All rights reserved.