我的任务是反序列化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编码,但无论我尝试哪种方式都会遇到类似的错误。我也尝试删除'@'但后来遇到问题,因为字符串没有用引号括起来,所以解析器再次出现异常。
答案 0 :(得分:2)
我认为PSON有两种不同的含义。
PSON与PowerShell相关,是指PowerShell Object Notation。这是一种用于在文件中存储PowerShell数据对象的格式。 PSON文件的一个有用功能是它可以在PowerShell中执行时反序列化。
有关详细信息,请参阅此问题:Save hash table in PowerShell object notation (PSON)
您提问的文件是有效的PowerShell PSON文件。
其他PSON似乎是Protocol JSON 。 " JSON的超高效二进制序列化格式" 这个,我一无所知。