js代码是......
var queryString = 'Dolphin Travels (Sagar Travels)';
var results = jsonPath(jsonvar, "$.availableTrips[?("+queryString+")]");
错误:
SyntaxError: jsonPath: unterminated string literal: _v.travels == 'Dolphin Travels (Sagar Travels)
答案 0 :(得分:0)
首先,让我们了解一些先决条件:
您正在搜索'Dolphin Travels(Sagar Travels)',但我在您的测试数据中没有看到这一点(至少您已经显示过),所以我无法真正分辨出对象/数组的哪个部分它在(无论是价值还是关键)。
以下是我正在使用的示例数据:
var t = {
'availableTrips': [
{
'busType': 'Volvo A/C-Multi Axle Semi sleeper (2+2)',
'busTypeId': '101',
'fares': 250,
'travels': 'SVR Tours and Travel [Citizen]'
},
{
'busType': 'Lorem Ipsum',
'busTypeId': '102',
'fares': 300,
'travels': 'SVR Tours and Travel [Citizen]'
}
]
}
简单使用jsonPath(我还假设你的意思是this jsonPath library,因为你没有指定):
jsonPath(t,'$.availableTrips[?(/SVR/.test(@.travels))]');
产生availableTrips
数组中的对象数组,因为字符串SVR(作为正则表达式)都在它们中。
jsonPath(t,'$.availableTrips[?(/Volvo/.test(@.busType))]');
仅产生availableTrips
数组中的第一项,相当于t.availableTrips[0]
。
现在,回答你的问题:
转义时,您可以使用反斜杠\
,但由于您处于解释的字符串中,因此您需要将其转义为TWICE:\\
。一旦将字符串作为jsonParse
的参数发送,并再次作为在jsonParse
内解释的表达式的一部分。像这样:
jsonPath(t,'$.availableTrips[?(/\\(2\\+2\\)/.test(@.busType))]');
请注意,我还必须转义+
量词,以及(
和)
组元字符。
在消毒用户输入方面,例如var queryString = 'Dolphin Travels (Sagar Travels)';
,您可以执行以下操作(请参阅What special characters must be escaped in regular expressions?):
var sanitizedQueryString = queryString.replace(/([\.\^\$\*\+\?\(\)\[\{\\\|])/g,'\\$1');