我有一個包含多個「en-US」鍵的有效JSON對象,我試圖選擇它。爲此,我使用JsonPath如果json包含空數組,Json.NET SelectToken不起作用
"$..en-US"
它被給予由Json.NET實現的SelectTokens過程。這是一個.NET的JSON框架。只要我的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);
這裏,令牌變量將僅包含一個元素!這將是'header'對象的'controls'中的空數組之前的「en-US」發生。然而,當我剛離開這個「頭」對象了:
var myJson =
@"{
'controls': [
{
'messages': {
'addSuggestion': {
'en-US': 'Add'
}
}
},
{
'controls': [
{
'controls': [
{
'defaultCaption': {
'en-US': 'Sort by'
},
'sortOptions': [
{
'label': {
'en-US': 'Name'
}
}
]
}
]
}
]
}
]
}";
我會得到所有的「EN-US」的3個occurencies預期。順便說一句,如果我在an online tool的第一個JSON對象(即包含一個空數組)的第一個JSON對象上驗證我的JsonPath,那麼正如我所料,我得到了所有三個「en-US」的情況。這與我從Json.NET中得到的不同。我想知道這是一個錯誤還是我不得不手動處理這種情況?