【问题标题】:Deserialize PSON file反序列化 PSON 文件
【发布时间】:2015-07-22 02:39:30
【问题描述】:

我的任务是对 PSON(PowerShell 对象表示法)文件进行反序列化,并且正在努力使其正常工作。 显然 PSON 文件是 Puppet 使用的 JSON 的变体,它对字符串进行不同的编码 - 根据 this source

我已经尝试使用标准的 JSON.Net DeserializeObject 方法:

using (var r = new StreamReader(psonFilePath))
{
    string json = r.ReadToEnd();
    dynamic jsonObject = JsonConvert.DeserializeObject(json);
}

以上代码抛出异常:

"解析值时遇到意外字符:@.Path '', 第 0 行,位置 0。”

这是有道理的,因为标准 JSON 文件的开头不会有“@”。

PSON 文件示例如下:

@{
    shapes = @{
        'SQ4297' = @{
            shapeid = 'SQ4297'
            shapetype = 'square'
            sides = 'four'
            colour = 'purple'
        }
        'SQ6281' = @{
            shapeid = 'SQ6281'
            shapetype = 'square'
            sides = 'four'
            colour = 'orange'
        }
        'TR14' = @{
            shapeid = 'TR14'
            shapetype = 'triange'
            sides = 'three'
            colour = 'green'
        }
    }
}

上面提到的链接表明

大多数解析器会从 PSON 产生可用的输出,如果它们是 指示将输入解释为 Latin-1 编码

我尝试过对 JSON 使用不同的编码,但无论我尝试哪种方式都会出现类似的错误。我也尝试删除“@”,但后来遇到问题,因为字符串没有用引号括起来,所以解析器再次出现异常。

【问题讨论】:

  • 您确定您发布的内容是根据该链接的有效 PSON 吗?它说 “PSON 在对象、数组、数字、布尔值和空值的表示方面与 JSON 没有区别”“PSON 字符串...必须以 " 字符开头和结尾"。您发布的内容与其中任何一个都不匹配。
  • 嗯,这可以解释为什么它不起作用;-) 我错过了关于引号的部分。也许我需要回到文件源并获取有关文件应该如何使用的更多信息。
  • 不仅仅是引号 - 事实上它有 @ 符号在那里,任何值之间没有逗号,= 而不是 : 等等等等
  • @JamesThorpe 是的-点了,我将获得有关该文件及其来源的更多信息并更新问题。谢谢
  • 一个有效的 PSON 文件的要点是它会反序列化自己。如果您在 PowerShell 中将其作为脚本块运行,它将重新创建其中的所有对象。

标签: c# json powershell json.net


【解决方案1】:

我认为这里的 PSON 有两种不同的含义。

  1. PSON 与 PowerShell 相关,指的是 PowerShell Object Notation。这是一种用于将 PowerShell 数据对象存储在文件中的格式。 PSON 文件的一个有用特性是它可以在 PowerShell 中执行时自行反序列化。

    有关更多信息,请参阅此问题:Save hash table in PowerShell object notation (PSON)

    您所质疑的文件是有效的 PowerShell PSON 文件。

  2. 另一个 PSON 似乎是 Protocol JSON “一种超高效的 JSON 二进制序列化格式” 这个,我一无所知。

【讨论】:

  • 是的,这个文件似乎是 #1 - 一个 PowerShell 对象,因此它永远不会被解析为 JSON。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多