从包含数组的`.json`文件转换时出现奇怪的行为

时间:2016-07-07 18:59:37

标签: arrays json powershell powershell-v5.0

我有以下JSON文件(来自VS项目的bundleconfig.json文件):

[
    {
        "outputFileName": "Scripts/a.js",
        "inputFiles": [ "Scripts/b.js", "Scripts/c.js" ]
    },
    ...
]

我正在解析它:

$json = Get-Content $filePath -Encoding UTF8 | `
    Out-String | `
    ConvertFrom-Json

我希望结果$jsonArray,但似乎不是。当我试图看到数组的内容时:

$json | ForEach-Object { $_ }

没有打印出来(更正:打印空行)。所以,我认为$json实际上并不是一个数组,并试图找出它的类型:

$json.GetType()
$json | ForEach-Object { $_ }

这是奇怪的部分。 $json.GetType()打印出System.Array(以及其他内容),现在ForEach-Object按预期工作!

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
8

outputFileName : Scripts/a.js
inputFiles     : {Scripts/b.js,Scripts/c.js}

所以,我的代码仅在$json.GetType()命令存在时才有效,否则就不行。

我可以简单地离开$json.GetType()命令并完成它,但我必须知道这种行为背后的原因。

有什么想法吗?

更新

  1. 这是PSVersion: 5.0.10586.122
  2. 这两个文件都是UTF-8
  3. 此代码是psake构建脚本的一部分,也许这有什么用呢?
  4. 该文件似乎不是罪魁祸首,我使用我在运行中制作的虚拟文件进行测试,行为是相同的。
  5. 我甚至无法在构建脚本之外自行复制它。我用.json和那几行代码(没有$json.GetType()命令)创建了一个repro文件夹,它按预期工作。

0 个答案:

没有答案