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

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

我有一个 Json 对象

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

其中

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

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 json string elasticsearch javascript-objects
1个回答
-2
投票

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

// Actual JSON strings 
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.