From f0139eb83785555ae8368d036acc07111cc30f15 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Thu, 17 Aug 2023 17:22:05 +0200 Subject: [PATCH] Update comment in JsonPathMatcher.cs --- src/WireMock.Net/Matchers/JSONPathMatcher.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/WireMock.Net/Matchers/JSONPathMatcher.cs b/src/WireMock.Net/Matchers/JSONPathMatcher.cs index 94d76cca..5437a75f 100644 --- a/src/WireMock.Net/Matchers/JSONPathMatcher.cs +++ b/src/WireMock.Net/Matchers/JSONPathMatcher.cs @@ -123,12 +123,9 @@ public class JsonPathMatcher : IStringMatcher, IObjectMatcher { var array = ConvertJTokenToJArrayIfNeeded(jToken); - // The SelectToken method can accept a string path to a child token ( i.e. "Manufacturers[0].Products[0].Price"). In that case it will return a JValue (some type) which does not implement the IEnumerable interface. - // Using ?.Any() == true relays that we use a JSONPath queries and the SelectToken will return a JObject ( implements the IEnumerable interface). - // So the current code works only when the JSONPath is expression and not when we pass a valid string path to child. - // My suggestion is to roll back to != null to cover the both cases. - - return MatchScores.ToScore(_patterns.Select(pattern => array.SelectToken(pattern.GetPattern()) != null ).ToArray(), MatchOperator); + // The SelectToken method can accept a string path to a child token ( i.e. "Manufacturers[0].Products[0].Price"). + // In that case it will return a JValue (some type) which does not implement the IEnumerable interface. + return MatchScores.ToScore(_patterns.Select(pattern => array.SelectToken(pattern.GetPattern()) != null).ToArray(), MatchOperator); } // https://github.com/WireMock-Net/WireMock.Net/issues/965 @@ -143,9 +140,9 @@ public class JsonPathMatcher : IStringMatcher, IObjectMatcher var item = property.First(); if (item is JArray) { - return jToken; + return jToken; } - + return new JObject { [property.Path] = new JArray(item)