You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中向JSON查询添加字符串变量且不产生多余转义

问题原因
  • 你定义的queryString不是合法JSON格式:JSON要求顶层必须是单个对象或数组,你当前的字符串是两个独立对象用逗号拼接,没有外层包裹结构,所以JSON.parse()会直接抛出语法异常。
  • 直接把字符串插入must数组时,JS会将其识别为普通字符串元素,序列化请求时自然会给字符串加引号、转义内部引号,无法变成你需要的查询对象。
最优解决方案(推荐)

不要拼接JSON字符串,直接通过JS数组动态生成查询对象,完全规避转义和格式问题:

// 1. 动态构建match查询数组,可根据你的过滤器数量灵活增删元素
const matchQueries = [
  { "match": { "log.level": "Information" } },
  { "match": { "metadata.log_event_category": "Open Id Connect" } }
]
// 动态新增查询的示例:
// if (用户选中了日志级别过滤器) matchQueries.push({ match: { "log.level": 选中的级别 } })

// 2. 通过扩展运算符把match查询展开到must数组中
var request =
{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                ...matchQueries,
                {
                    "range": {
                        "@timestamp": {
                            "gte": chartArray[0].dateTimeFrom,
                            "lte": chartArray[0].dateTimeTo
                        }
                    }
                }
            ]
        }
    },
    "aggs": {
        "myAggName": {
            "date_histogram": {
                "field": "@timestamp",
                [elasticIntervalType]: elasticIntervalUnits,
                "format": chartArray[0].scaleLabelAttributes
            }
        },
    }
}

最后直接调用JSON.stringify(request)即可得到无多余转义的合法请求JSON。

兼容你现有字符串的解决方案(不推荐)

如果必须使用现有的queryString格式,给字符串外层加上方括号转为合法数组JSON后再解析:

// 给原有字符串外层加[],变成合法数组JSON
var queryString = '[{ "match": { "log.level": "Information" } }, { "match": { "metadata.log_event_category": "Open Id Connect" } }]'
var request =
{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                // 解析后展开数组
                ...JSON.parse(queryString),
                {
                    "range": {
                        "@timestamp": {
                            "gte": chartArray[0].dateTimeFrom,
                            "lte": chartArray[0].dateTimeTo
                        }
                    }
                }
            ]
        }
    },
    "aggs": {
        "myAggName": {
            "date_histogram": {
                "field": "@timestamp",
                [elasticIntervalType]: elasticIntervalUnits,
                "format": chartArray[0].scaleLabelAttributes
            }
        },
    }
}

内容的提问来源于stack exchange,提问作者OJB1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:27:04