2016-09-22 38 views
-1

直接打印$ OBJ这是dummy.json文件

{ 
    "key1":"value1", 
    "key2":"value2" 
} 

我阅读本文件的内容给一个变量并将结果输出

C:> $obj = Get-Content .\dummy.json 
C:> $obj 
{ 
     "key1":"value1", 
     "key2":"value2" 
} 
C:> Write-Host "$obj" 
{  "key1":"value1",  "key2":"value2" } 

我知道Get-Content不保留换行符并通过“”连接它。 Powershell keep text formatting when reading in a file

但是为什么在上述2个输出中存在不一致呢?我猜Write-Host正在正确地完成它的工作。或者我错了?

+0

嗨,怎么样'写主机$ obj'? – sodawillow

+0

@sodawillow是的工作,明白了。 – Srinath

回答

3

它不是Get-Content连接线(它的输出是一个字符串数组),但你把变量放在双引号("$obj")。你可以通过自己加入这些线来避免这种情况:

Write-Host ($obj -join "`n") 
Write-Host ($obj | Out-String) 
Write-Host $($OFS="`n"; "$obj") 

另一种选择是直接以单个字符串的形式读取文件。像这样的(需要的PowerShell v3的或更高版本):

$obj = Get-Content .\dummy.json -Raw 

或像这样:

$obj = [IO.File]::ReadAllText('.\dummy.json') 
+0

很酷,明白了。所以,我对Get-Content和Write-Host的理解是错误的。谢谢 :) – Srinath

相关问题