gpt4 book ai didi

json - ConvertFrom-Json将小写字母e转换为大写字母(有时)

转载 作者:行者123 更新时间:2023-12-02 23:18:04 28 4
gpt4 key购买 nike

我正在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规范如下:

MUST represent all non-integer numbers in exponential notation

  • including a nonzero single-digit significant integer part, and
  • including a nonempty significant fractional part, and
  • including no trailing zeroes in the significant fractional part (other than as part of a “.0” required to satisfy the preceding point), and
  • including a capital “E”, and
  • including no plus sign in the exponent, and
  • including no insignificant leading zeroes in the exponent


资料来源: https://gibson042.github.io/canonicaljson-spec/

尽管JSON规范同时支持这两个选项( eE)。
exponent
""
'E' sign digits
'e' sign digits

资料来源: https://www.crockford.com/mckeeman.html

您也许可以使用Newtonsoft.Json类直接将对象转换为JSON,并传递自定义的Converter。
  • https://stackoverflow.com/a/28743082/736079

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

    关于json - ConvertFrom-Json将小写字母e转换为大写字母(有时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59695171/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com