0

jsコードは……

var queryString = 'Dolphin Travels (Sagar Travels)';
var results = jsonPath(jsonvar, "$.availableTrips[?("+queryString+")]");

エラー :

SyntaxError: jsonPath: unterminated string literal: _v.travels == 'Dolphin Travels (Sagar Travels)

ここに画像の説明を入力

4

1 に答える 1

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 の簡単な使用法 (指定しなかったため、この jsonPath ライブラリを意味していると想定しています):

jsonPath(t,'$.availableTrips[?(/SVR/.test(@.travels))]');

availableTrips文字列 SVR (正規表現として) が両方にあるため、配列内のオブジェクトの配列を生成します。

jsonPath(t,'$.availableTrips[?(/Volvo/.test(@.busType))]');

availableTripsと同等の、配列内の最初の項目のみを生成しt.availableTrips[0]ます。


さて、あなたの質問に答えるために:

エスケープするときは、バックスラッシュを使用できます\が、解釈される文字列にいるため、2 回エスケープする必要があります\\。のパラメータとして送信される文字列に対して 1 回、jsonParse内で解釈される式の一部として 2 回jsonParse。そのようです:

jsonPath(t,'$.availableTrips[?(/\\(2\\+2\\)/.test(@.busType))]');

+また、量指定子()グループ メタ文字もエスケープする必要があることに注意してください。

ユーザー入力のサニタイズに関しては、たとえばvar queryString = 'Dolphin Travels (Sagar Travels)';、次のことを実行できます (正規表現でエスケープする必要がある特殊文字は?を参照してください)。

var sanitizedQueryString = queryString.replace(/([\.\^\$\*\+\?\(\)\[\{\\\|])/g,'\\$1');
于 2013-11-16T08:35:33.383 に答える