-Fixed JSONPath queries combining wildcard with property search
This commit is contained in:
@@ -740,6 +740,52 @@ namespace Newtonsoft.Json.Tests.Linq.JsonPath
|
||||
Assert.AreEqual(1L, v.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WildcardWithProperty()
|
||||
{
|
||||
JObject o = JObject.Parse(@"{
|
||||
""station"": 92000041000001,
|
||||
""containers"": [
|
||||
{
|
||||
""id"": 1,
|
||||
""text"": ""Sort system"",
|
||||
""containers"": [
|
||||
{
|
||||
""id"": ""2"",
|
||||
""text"": ""Yard 11""
|
||||
},
|
||||
{
|
||||
""id"": ""92000020100006"",
|
||||
""text"": ""Sort yard 12""
|
||||
},
|
||||
{
|
||||
""id"": ""92000020100005"",
|
||||
""text"": ""Yard 13""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
""id"": ""92000020100011"",
|
||||
""text"": ""TSP-1""
|
||||
},
|
||||
{
|
||||
""id"":""92000020100007"",
|
||||
""text"": ""Passenger 15""
|
||||
}
|
||||
]
|
||||
}");
|
||||
|
||||
IList<JToken> tokens = o.SelectTokens("$..*[?(@.text)]").ToList();
|
||||
int i = 0;
|
||||
Assert.AreEqual("Sort system", (string)tokens[i++]["text"]);
|
||||
Assert.AreEqual("TSP-1", (string)tokens[i++]["text"]);
|
||||
Assert.AreEqual("Passenger 15", (string)tokens[i++]["text"]);
|
||||
Assert.AreEqual("Yard 11", (string)tokens[i++]["text"]);
|
||||
Assert.AreEqual("Sort yard 12", (string)tokens[i++]["text"]);
|
||||
Assert.AreEqual("Yard 13", (string)tokens[i++]["text"]);
|
||||
Assert.AreEqual(6, tokens.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void QueryAgainstNonStringValues()
|
||||
{
|
||||
|
||||
@@ -106,7 +106,12 @@ namespace Newtonsoft.Json.Linq.JsonPath
|
||||
if (_currentIndex > currentPartStartIndex)
|
||||
{
|
||||
string member = _expression.Substring(currentPartStartIndex, _currentIndex - currentPartStartIndex);
|
||||
PathFilter filter = (scan) ? (PathFilter)new ScanFilter() { Name = member } : new FieldFilter() { Name = member };
|
||||
if (member == "*")
|
||||
{
|
||||
member = null;
|
||||
}
|
||||
|
||||
PathFilter filter = (scan) ? (PathFilter)new ScanFilter { Name = member } : new FieldFilter { Name = member };
|
||||
filters.Add(filter);
|
||||
scan = false;
|
||||
}
|
||||
@@ -122,7 +127,6 @@ namespace Newtonsoft.Json.Linq.JsonPath
|
||||
ended = true;
|
||||
break;
|
||||
case ' ':
|
||||
//EatWhitespace();
|
||||
if (_currentIndex < _expression.Length)
|
||||
{
|
||||
ended = true;
|
||||
@@ -136,7 +140,8 @@ namespace Newtonsoft.Json.Linq.JsonPath
|
||||
{
|
||||
member = null;
|
||||
}
|
||||
PathFilter filter = (scan) ? (PathFilter)new ScanFilter() { Name = member } : new FieldFilter() { Name = member };
|
||||
|
||||
PathFilter filter = (scan) ? (PathFilter)new ScanFilter { Name = member } : new FieldFilter { Name = member };
|
||||
filters.Add(filter);
|
||||
scan = false;
|
||||
}
|
||||
@@ -177,7 +182,7 @@ namespace Newtonsoft.Json.Linq.JsonPath
|
||||
{
|
||||
member = null;
|
||||
}
|
||||
PathFilter filter = (scan) ? (PathFilter)new ScanFilter() { Name = member } : new FieldFilter() { Name = member };
|
||||
PathFilter filter = (scan) ? (PathFilter)new ScanFilter { Name = member } : new FieldFilter { Name = member };
|
||||
filters.Add(filter);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user