У меня есть действительный объект JSON, который содержит несколько ключей «en-US», которые я пытаюсь выбрать. Для этой цели я использую JsonPathJson.NET SelectTokens не работает, если json содержит пустой массив
"$..en-US"
которое дается в порядке, SelectTokens реализуемого Json.NET. Это среда JSON для .NET. Все работает отлично и хорошо, пока мой JSON не содержит пустого массива. Вот пример:
var myJsonPath = "$..en-US";
var myJson =
@"{
'controls': [
{
'messages': {
'addSuggestion': {
'en-US': 'Add'
}
}
},
{
'header': {
'controls': []
},
'controls': [
{
'controls': [
{
'defaultCaption': {
'en-US': 'Sort by'
},
'sortOptions': [
{
'label': {
'en-US': 'Name'
}
}
]
}
]
}
]
}
]
}";
var jToken = JObject.Parse(myJson);
var tokens = jToken.SelectTokens(myJsonPath);
Здесь лексемы переменная будет содержать только один элемент! Это будет происхождение «en-US» перед пустым массивом в «элементах управления» объекта «header». Однако, когда я просто оставить это «заголовок» объект из:
var myJson =
@"{
'controls': [
{
'messages': {
'addSuggestion': {
'en-US': 'Add'
}
}
},
{
'controls': [
{
'controls': [
{
'defaultCaption': {
'en-US': 'Sort by'
},
'sortOptions': [
{
'label': {
'en-US': 'Name'
}
}
]
}
]
}
]
}
]
}";
я буду получать все 3 occurencies на «EN-US», как и ожидалось. Btw, если я проверю свой JsonPath на первом объекте JSON (т. Е. Который содержит пустой массив) в an online tool, то, как и ожидалось, я получаю все три случая «en-US». Это расходится с тем, что я получаю от Json.NET. Мне интересно, это ошибка или мне нужно как-то обрабатывать этот случай?