Проблема заключается в том, что библиотека PowerShell JSON выводит числа точек с плавающей точкой CLR. Преобразуя из JSON, вы превращаете строку JSON в объект CLR / PowerShell со связанными типами для чисел и строк и тому подобное. Преобразование обратно в JSON сериализует этот объект обратно в JSON, но для этого используется конфигурация форматера по умолчанию. NET. Нет метаданных из оригинального документа JSON, чтобы помочь преобразованию. Здесь также могут возникать ошибки округления и усечения, различный порядок элементов.
JSON spe c для канонической формы (форма, которую вы хотите использовать при хешировании) выглядит следующим образом:
ДОЛЖЕН представлять все нецелые числа в экспоненциальной записи
- , включая ненулевую целую часть с единичным ди git и
- , включая непустую значащую дробную часть, и
- , включая отсутствие конечных нулей в значащей дробной части (кроме как в виде «.0», необходимого для удовлетворения предыдущего пункта), и
- , включая заглавную «E» »И
- , включая знак плюс в показателе степени, и
- , включая незначительные начальные нули в показателе степени
Источник: https://gibson042.github.io/canonicaljson-spec/
Хотя спецификации для JSON поддерживают оба варианта (e
и E
).
exponent
""
'E' sign digits
'e' sign digits
Источник: https://www.crockford.com/mckeeman.html
Вы можете преобразовать объект в * 106 1 * используя классы Newtonsoft. Json напрямую и передавая пользовательский конвертор.
Лучшим решением, вероятно, будет использование специализированного компонента форматирования, который напрямую манипулирует существующим документом JSON без преобразования сначала к объектам CLR.