private void btnSubmit_Click(object sender, EventArgs e) { txtOutput.Text = string.Empty; var result = validateWindow(); if (!string.IsNullOrEmpty(result)) MessageBox.Show(result, APPLICATION_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error); try { JsonPathModel model = new JsonPathModel { SourceJson = string.Join(Environment.NewLine, txtJson.Lines), Expressions = Array.ConvertAll(txtExpression.Text.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries), (s) => new JsonPathExpression { Expression = s }) }; var expressions = _presenter.ParseExpression(model); foreach (var expression in expressions) { if (!isFirstLine()) txtOutput.Text += Environment.NewLine + Environment.NewLine; var nodes = expression.Nodes.Select(node => new {Path = node.Path, Value = JsonConvert.Serialize(node.Value)}); txtOutput.Text += string.Format("Output of {0} is: \r\n {1}\r\n", expression.Expression, string.Join(Environment.NewLine + Environment.NewLine, nodes)); } } catch (Exception ex) { MessageBox.Show(ex.Message, APPLICATION_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public IEnumerable<JsonPathExpression> ParseExpression(JsonPathModel model, ScriptEvaluatorFactory.ScriptEvaluatorTypes evaluatorType = ScriptEvaluatorFactory.ScriptEvaluatorTypes.Basic, IJsonPathValueSystem valueSystem = null) { IList<JsonPathExpression> result = new List<JsonPathExpression>(model.Expressions.Count()); var json = JsonConvert.DeserializeObject(model.SourceJson); var context = new JsonPathContext { ScriptEvaluator = new JsonPathScriptEvaluator(ScriptEvaluatorFactory.Create(evaluatorType).EvaluateScript), ValueSystem = valueSystem }; foreach(JsonPathExpression expression in model.Expressions) { var nodes = context.SelectNodes(json, expression.Expression); Array.Copy(nodes, expression.Nodes.ToArray(), nodes.Length); result.Add(expression); } return result.AsEnumerable(); }