Как остановить Powershell 7 ConvertFrom- Json переформатирование меток времени? - PullRequest
4 голосов
/ 14 июля 2020
Get-Content 'file.json' | ConvertFrom-Json

Это дает другой результат для powershell 5 и 7.

v5 gives me actual timestamp values from the json: eg 2018-01-26T17:48:51.220Z
v7 gives me reprocessed timestamp values from the json  eg 26/01/2018 17:48:51

Как я могу заставить v7 вести себя как v5? Мне нужны исходные значения из json.

1 Ответ

5 голосов
/ 14 июля 2020

Поведение ConvertFrom-Json изменено в PowerShell [Core] v6 + : строка значения, отформатированные с использованием стандартной даты o (туда и обратно) / формат времени теперь преобразуются в экземпляры [datetime]) , а не анализируются как строки - это удобный способ передачи временных меток туда и обратно через (v6 +) ConvertTo-Json, без необходимость явного преобразования строк в / из.

Если вам нужно вернуть прежнее поведение, явно преобразуйте полученные экземпляры [datetime] обратно в строки, используя .ToString('o').

Вот простой пример:

# v6+
PS> ('{ "timestamp": "2018-01-26T17:48:51.220Z" }' | 
       ConvertFrom-Json).timestamp.ToString('o')

2018-01-26T17:48:51.2200000Z
  • Существует некоторая гибкость в отношении вариантов формата входных : дробные секунды - это необязательный, и если он присутствует, количество десятичных знаков может меняться.

  • Напротив, формат o всегда использует 7 знаков после запятой, что отличается от введенного вами.

    • Вы можете применять произвольное форматирование на основе o n a фиксированное количество десятичных знаков, но учтите, что вы не сможете определить, сколько десятичных знаков было фактически использовано во входных .
      • Например, чтобы получить 3 десятичных знака: [datetime]::UtcNow.ToString("yyyy-MM-dd'T'HH':'mm':'ss'.'fffK")
  • Если вы хотите предотвратить преобразование в- [datetime] в источнике , у вас будет использовать низкоуровневый подход - ConvertFrom-Json не предлагает решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...