从Json转换为小写';(有时)他会被判死刑

从Json转换为小写';(有时)他会被判死刑,json,powershell,Json,Powershell,我在PowerShell中处理JSON文件,似乎ConvertFrom JSON只在某些(罕见的)情况下更改其输入的大小写 例如,当我这样做时: $JsonStringSrc = '{"x":2.2737367544323206e-13,"y":1759,"z":33000,"width":664}' $JsonStringTarget = $JsonStringSrc | ConvertFrom-Json | ConvertTo-Json -Depth 100 -Compress $Json

我在PowerShell中处理JSON文件,似乎ConvertFrom JSON只在某些(罕见的)情况下更改其输入的大小写

例如,当我这样做时:

$JsonStringSrc = '{"x":2.2737367544323206e-13,"y":1759,"z":33000,"width":664}' 
$JsonStringTarget = $JsonStringSrc | ConvertFrom-Json | ConvertTo-Json -Depth 100 -Compress
$JsonStringTarget 
它返回:

{"x":2.2737367544323206E-13,"y":1759,"z":33000,"width":664}
小写的
e
变成了大写的
e
,在处理过程中验证正确的i/o时弄乱了哈希


这是预期的行为(可能是区域设置)?ConvertFrom Json是否有一个设置,可以让我的输入单独用于输出?

问题在于PowerShell的Json库输出CLR起始点编号的方式。通过从JSON转换,可以将JSON字符串转换为CLR/PowerShell对象,该对象具有数字和字符串等的关联类型。转换回JSON会将该对象序列化回JSON,但会使用.NET默认格式化程序配置来执行此操作。原始JSON文档中没有元数据来帮助转换。舍入错误和截断,元素的顺序也可能不同

规范格式(散列时要使用的格式)的JSON规范如下:

必须以指数表示法表示所有非整数

  • 包括一个非零的单位数有效整数部分,以及
  • 包括非空的有效小数部分,以及
  • 在有效分数部分不包括尾随零(满足上一点所需的“.0”部分除外),以及
  • 包括大写字母“E”和
  • 指数中不包括加号,以及
  • 指数中不包括不重要的前导零
资料来源:

尽管JSON规范支持这两个选项(
e
e

资料来源:

您可以直接使用Newtonsoft.JSON类并传入自定义转换器,将对象转换为JSON


更好的解决方案可能是使用专门的格式化程序组件,直接操作现有的JSON文档,而无需首先将其转换为CLR对象。

从我可以看出,这不是JSON转换器。。。这就是PoSh用大写字母
E
表示科学符号的方式。为什么这会破坏验证?@Theo-我猜OP使用的是散列算法。。。而
E
不等于
E
。。。[咧嘴笑]回答得很好,有没有解释为什么我所有的e都没有出现这种情况?没有线索。可能只在您更改的json对象上?你必须分享更多的代码,这样我们才能更深入地挖掘。
exponent
   ""
   'E' sign digits
   'e' sign digits