我在我的 powershell 應用程式中使用資料背景關系(對我來說是第一次),據我所知,所有資料背景關系屬性和值都是用 JSON 設定的,所有值都是字串。例子:
$DataObject = ConvertFrom-Json @"
{
"myproperty":"false"
}
但是我遇到了一個問題,即錯誤的錯誤并不總是評估為錯誤的。當我將控制元件的啟用屬性系結到 myproperty 時,它會正確禁用,因為它設定為 false。
但是,如果我嘗試將該屬性評估為布林值,它會回傳 true:
If($state.myproperty){$true} Else {$false}
True
為了控制的目的,我不明白為什么它注冊為布林值 false,但我不能在代碼中這樣參考它。
請教我我所缺少的東西。
編輯我開始明白 Powershell 會將超過 0 個字符的任何字串注冊為 true。但是,我仍然很好奇為什么當系結到控制元件屬性時,這似乎不是問題。
EDIT2我解決了這個問題,實際上沒有在 JSON 中設定默認值,只是在腳本開頭附近將 $state.myproperty 設定為 $false,并在我的條件需要時將其設定為 $true。
仍然對控制元件系結正確評估字串“false”的原因感到好奇。另外,如果我想在 JSON 中初始化它,你可以在不使用引號的情況下這樣做嗎?例如 "myproperty":false ?
uj5u.com熱心網友回復:
在JSON方面:
false并且true- 請注意沒有參考 - 是 布爾JSON 值,表示其名稱所暗示的值。相比之下,
"false"and"true"是 JSON字串,其值恰好分別是false和true——字串值沒有內在含義,除非按照慣例,JSON 檔案的使用者必須知道。ConvertTo-Json(這種約定的一個示例是ConvertFrom-Json使用特殊格式的字串,例如"2022-06-27T15:31:38.935539-04:00"表示日期/時間([datetime])值,以彌補 JSON 本身缺少日期/時間資料型別 - 請參閱此答案)
因此,您應該使用以下內容創建一個物件,其.myproperty值包含一個實際的布林值 - 注意false未參考:
$DataObject = ConvertFrom-Json @"
{
"myproperty": false
}
"@
通常,除了總是雙引號(例如,)的字串之外, JSON 支持以下不帶引號的原始資料型別作為值:"foo"
- 布林值:
true和false - 空值:
null - 數字:例如,
42,和-421.01e2- 注意:標準不允許前綴
或.1簡寫0.1,僅支持十進制數字表示;但是,具體的實作可能不那么嚴格。
- 注意:標準不允許前綴
在 PowerShell / .NET 方面:
PowerShellConvertFrom-Json將這些值映射到其類似的 .NET 資料型別[string]( System.String) 和[bool]( System.Boolean):
(' false ' | ConvertFrom-Json).GetType().FullName # -> System.Boolean
# vs.
(' "false" ' | ConvertFrom-Json).GetType().FullName # -> System.String
就將這些值解釋為布林值而言,這意味著:
只有不帶引號
false的值和true值直接映射到它們的[bool]對應項(用$falsePowerShell$true表示)。正如您所觀察到的,當 PowerShell在 Boolean context 中評估 string時,它會考慮任何非空 string ,而不管其 content
$true,因此也會[bool] "false"產生$true。- 如果您正在處理您知道包含
"true"or"false"(或其任何大小寫變體)的字串,并且您想將其決議為 Boolean,請使用該[bool]::Parse()方法;例如,[bool]::Parse("false")yield$false,如預期的那樣。
- 如果您正在處理您知道包含
PowerShell 通常實作自己的自動到布爾轉換[1](例如上面描述的那個),這不適用于.NET API。
- 鑒于 .NET沒有內置的字串到布林值的轉換,
DataContext將字串解釋為布林值取決于型別,盡管使用[bool]::Parse()是一個邏輯候選(在 C# 語法中,例如bool.Parse("false"):)
- 鑒于 .NET沒有內置的字串到布林值的轉換,
[1] 有關轉換規則的摘要,請參閱此答案的底部。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/496662.html
上一篇:Powershell-屬性不出現
