From 0ceb4146948b0a7946ad03e6305217283ba09fed Mon Sep 17 00:00:00 2001 From: Diego de la Hera Date: Tue, 20 Sep 2022 12:23:13 -0300 Subject: [PATCH 1/2] Validate JSON input and expression --- docs/_static/html/jmespath_2col_demo.html | 5 +++-- docs/_templates/index.html | 26 ++++++++++++++++++----- docs/_themes/jmespath/layout.html | 22 +++++++++++++++---- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/docs/_static/html/jmespath_2col_demo.html b/docs/_static/html/jmespath_2col_demo.html index db2a541..58f0ad1 100644 --- a/docs/_static/html/jmespath_2col_demo.html +++ b/docs/_static/html/jmespath_2col_demo.html @@ -14,9 +14,10 @@
Result
type="text" placeholder="Expression" value="{expression}" /> - - + diff --git a/docs/_templates/index.html b/docs/_templates/index.html index 40f4518..8df0e4a 100644 --- a/docs/_templates/index.html +++ b/docs/_templates/index.html @@ -24,7 +24,8 @@ - +

Result


@@ -87,10 +89,24 @@ 

Libraries in Multiple Languages

$(document).ready(function() { $('.jmespath-demo').each(function(i, el) { function evaluateDemo(el) { - var expression = $(el).find('.jmespath-expression').val(); - var inputData = JSON.parse($(el).find('.jmespath-input').val()); - var result = jmespath.search(inputData, expression); - $(el).find('.jmespath-result').text(JSON.stringify(result, null, 2)); + var expressionTextArea = $(el).find('.jmespath-expression'); + var expression = expressionTextArea.val(); + var input = $(el).find('.jmespath-input'); + var inputData = {}; + try { + inputData = JSON.parse(input.val()); + input.parent().removeClass('has-error'); + } catch { + input.parent().addClass('has-error'); + } + var result; + try { + result = jmespath.search(inputData, expression); + expressionTextArea.parent().removeClass('has-error'); + } catch { + expressionTextArea.parent().addClass('has-error'); + } + $(el).find('.jmespath-result').text(JSON.stringify(result, null, 2)); } $(el).find('.jmespath-expression').bind('keyup', function() { evaluateDemo(el); diff --git a/docs/_themes/jmespath/layout.html b/docs/_themes/jmespath/layout.html index 2ed1a9d..942a71c 100644 --- a/docs/_themes/jmespath/layout.html +++ b/docs/_themes/jmespath/layout.html @@ -43,10 +43,24 @@ $(document).ready(function() { $('.jmespath-demo').each(function(i, el) { function evaluateDemo(el) { - var expression = $(el).find('.jmespath-expression').val(); - var inputData = JSON.parse($(el).find('.jmespath-input').val()); - var result = jmespath.search(inputData, expression); - $(el).find('.jmespath-result').text(JSON.stringify(result, null, 2)); + var expressionTextArea = $(el).find('.jmespath-expression'); + var expression = expressionTextArea.val(); + var input = $(el).find('.jmespath-input'); + var inputData = {}; + try { + inputData = JSON.parse(input.val()); + input.parent().removeClass('has-error'); + } catch { + input.parent().addClass('has-error'); + } + var result; + try { + result = jmespath.search(inputData, expression); + expressionTextArea.parent().removeClass('has-error'); + } catch { + expressionTextArea.parent().addClass('has-error'); + } + $(el).find('.jmespath-result').text(JSON.stringify(result, null, 2)); } $(el).find('.jmespath-expression').bind('keyup', function() { evaluateDemo(el); From 0311f290db6b543f4ca637b396e3326424d8da96 Mon Sep 17 00:00:00 2001 From: Diego de la Hera Date: Thu, 22 Sep 2022 10:53:41 -0300 Subject: [PATCH 2/2] Make expression validation independent of json input --- docs/_templates/index.html | 14 +++++++------- docs/_themes/jmespath/layout.html | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/_templates/index.html b/docs/_templates/index.html index 8df0e4a..28a1cea 100644 --- a/docs/_templates/index.html +++ b/docs/_templates/index.html @@ -91,6 +91,12 @@

Libraries in Multiple Languages

function evaluateDemo(el) { var expressionTextArea = $(el).find('.jmespath-expression'); var expression = expressionTextArea.val(); + try { + jmespath.search({}, expression); + expressionTextArea.parent().removeClass('has-error'); + } catch { + expressionTextArea.parent().addClass('has-error'); + } var input = $(el).find('.jmespath-input'); var inputData = {}; try { @@ -99,13 +105,7 @@

Libraries in Multiple Languages

} catch { input.parent().addClass('has-error'); } - var result; - try { - result = jmespath.search(inputData, expression); - expressionTextArea.parent().removeClass('has-error'); - } catch { - expressionTextArea.parent().addClass('has-error'); - } + var result = jmespath.search(inputData, expression); $(el).find('.jmespath-result').text(JSON.stringify(result, null, 2)); } $(el).find('.jmespath-expression').bind('keyup', function() { diff --git a/docs/_themes/jmespath/layout.html b/docs/_themes/jmespath/layout.html index 942a71c..c00ab83 100644 --- a/docs/_themes/jmespath/layout.html +++ b/docs/_themes/jmespath/layout.html @@ -45,6 +45,12 @@ function evaluateDemo(el) { var expressionTextArea = $(el).find('.jmespath-expression'); var expression = expressionTextArea.val(); + try { + jmespath.search({}, expression); + expressionTextArea.parent().removeClass('has-error'); + } catch { + expressionTextArea.parent().addClass('has-error'); + } var input = $(el).find('.jmespath-input'); var inputData = {}; try { @@ -53,13 +59,7 @@ } catch { input.parent().addClass('has-error'); } - var result; - try { - result = jmespath.search(inputData, expression); - expressionTextArea.parent().removeClass('has-error'); - } catch { - expressionTextArea.parent().addClass('has-error'); - } + var result = jmespath.search(inputData, expression); $(el).find('.jmespath-result').text(JSON.stringify(result, null, 2)); } $(el).find('.jmespath-expression').bind('keyup', function() {