在 JSON 正文中添加时间戳
Adding a timestamp in a JSON body
我对 powershell 很陌生,还不习惯。我正在尝试实时远程远程我的一些服务器。
为此,我使用 RestAPI 以 JSON 格式向我发送数据(Powershell 会自动转换为 PSCustomObject)。
问题是我的 JSON/data API 中没有字段时间戳,所以我不得不添加它。不幸的是,powershell 中的 JSON 工具似乎有限,我无法直接添加它。我必须创建一个名为 timestamp 的新 PSCustomObject,并将其与我来自 API.
的数据结合起来
不幸的是数据没有被正确解析。
我尝试遍历一个字符串、一个字符串数组、一个哈希表。这是最糟糕的。
最后我下载了一个 JSON.NET 框架,我现在正在尝试使用它...
所以这是主要代码部分:
Function Combine-Objects {
Param (
[Parameter(mandatory=$true)]$Object1,
[Parameter(mandatory=$true)]$Object2
)
$arguments = [Pscustomobject]@()
foreach ( $Property in $Object1.psobject.Properties){
$arguments += @{$Property.Name = $Property.value}
}
foreach ( $Property in $Object2.psobject.Properties){
$arguments += @{ $Property.Name= $Property.value}
}
$Object3 = [Pscustomobject]$arguments
return $Object3
}
while (1)
{
$startpoint = "REST API URL"
$endpoint = "POWER BI API URL"
$response = Invoke-RestMethod -Method Get -Uri $startpoint
$timestamp=get-date -format yyyy-MM-ddTHH:mm:ss.fffZ
$response2 = [PsCustomObject]@{"timestamp"=$timestamp}
$response3 = Combine-Objects -Object1 $response -Object2 $response2
Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json @($response3))
}
在组合 PSCustomObject 之前我有:
total : 8589463552
available : 5146566656
percent : 40,1
used : 3442896896
free : 5146566656
转换后给了我一个正确的 JSON
[
{
"total": 8589463552,
"available": 5146566656,
"percent": 40.1,
"used": 3442896896,
"free": 5146566656
}
]
在合并并添加时间戳后,我有:
Name Value
---- -----
total 8589463552
available 5146566656
percent 40,1
used 3442896896
free 5146566656
timestamp 2019-10-09T22:17:18.734Z
转换后哪个给了我:
[
{
"total": 8589463552
},
{
"available": 5146566656
},
{
"percent": 40.1
},
{
"used": 3442896896
},
{
"free": 5146566656
},
{
"timestamp": "2019-10-09T22:17:18.734Z"
}
]
虽然我想要的只是:
[
{
"total" :98.6,
"available" :98.6,
"percent" :98.6,
"used" :98.6,
"free" :98.6,
"timestamp" :"2019-10-11T09:21:04.981Z"
}
]
我认为你看错了。为什么不简单地将包含 DateTime string
的 NoteProperty
添加到 PSCustomObject
,然后将其转换回 json
格式?
像这样就足够了:
$json = @"
[
{
"total": 8589463552,
"available": 5146566656,
"percent": 40.1,
"used": 3442896896,
"free": 5146566656
}
]
"@
$jsonConverted = $json | ConvertFrom-Json
$params = @{
NotePropertyName = 'timestamp'
NotePropertyValue = (Get-Date).ToString('yyyy-MM-ddTHH:mm:ss.fff')
}
$jsonConverted | Add-Member @params
$newJson = $jsonConverted | ConvertTo-Json
$newJson
这将导致您要查找的 json
对象:
{
"total": 8589463552,
"available": 5146566656,
"percent": 40.1,
"used": 3442896896,
"free": 5146566656,
"timestamp": "2019-10-11T13:33:05.673"
}
我对 powershell 很陌生,还不习惯。我正在尝试实时远程远程我的一些服务器。 为此,我使用 RestAPI 以 JSON 格式向我发送数据(Powershell 会自动转换为 PSCustomObject)。
问题是我的 JSON/data API 中没有字段时间戳,所以我不得不添加它。不幸的是,powershell 中的 JSON 工具似乎有限,我无法直接添加它。我必须创建一个名为 timestamp 的新 PSCustomObject,并将其与我来自 API.
的数据结合起来不幸的是数据没有被正确解析。 我尝试遍历一个字符串、一个字符串数组、一个哈希表。这是最糟糕的。 最后我下载了一个 JSON.NET 框架,我现在正在尝试使用它...
所以这是主要代码部分:
Function Combine-Objects {
Param (
[Parameter(mandatory=$true)]$Object1,
[Parameter(mandatory=$true)]$Object2
)
$arguments = [Pscustomobject]@()
foreach ( $Property in $Object1.psobject.Properties){
$arguments += @{$Property.Name = $Property.value}
}
foreach ( $Property in $Object2.psobject.Properties){
$arguments += @{ $Property.Name= $Property.value}
}
$Object3 = [Pscustomobject]$arguments
return $Object3
}
while (1)
{
$startpoint = "REST API URL"
$endpoint = "POWER BI API URL"
$response = Invoke-RestMethod -Method Get -Uri $startpoint
$timestamp=get-date -format yyyy-MM-ddTHH:mm:ss.fffZ
$response2 = [PsCustomObject]@{"timestamp"=$timestamp}
$response3 = Combine-Objects -Object1 $response -Object2 $response2
Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json @($response3))
}
在组合 PSCustomObject 之前我有:
total : 8589463552
available : 5146566656
percent : 40,1
used : 3442896896
free : 5146566656
转换后给了我一个正确的 JSON
[
{
"total": 8589463552,
"available": 5146566656,
"percent": 40.1,
"used": 3442896896,
"free": 5146566656
}
]
在合并并添加时间戳后,我有:
Name Value
---- -----
total 8589463552
available 5146566656
percent 40,1
used 3442896896
free 5146566656
timestamp 2019-10-09T22:17:18.734Z
转换后哪个给了我:
[
{
"total": 8589463552
},
{
"available": 5146566656
},
{
"percent": 40.1
},
{
"used": 3442896896
},
{
"free": 5146566656
},
{
"timestamp": "2019-10-09T22:17:18.734Z"
}
]
虽然我想要的只是:
[
{
"total" :98.6,
"available" :98.6,
"percent" :98.6,
"used" :98.6,
"free" :98.6,
"timestamp" :"2019-10-11T09:21:04.981Z"
}
]
我认为你看错了。为什么不简单地将包含 DateTime string
的 NoteProperty
添加到 PSCustomObject
,然后将其转换回 json
格式?
像这样就足够了:
$json = @"
[
{
"total": 8589463552,
"available": 5146566656,
"percent": 40.1,
"used": 3442896896,
"free": 5146566656
}
]
"@
$jsonConverted = $json | ConvertFrom-Json
$params = @{
NotePropertyName = 'timestamp'
NotePropertyValue = (Get-Date).ToString('yyyy-MM-ddTHH:mm:ss.fff')
}
$jsonConverted | Add-Member @params
$newJson = $jsonConverted | ConvertTo-Json
$newJson
这将导致您要查找的 json
对象:
{
"total": 8589463552,
"available": 5146566656,
"percent": 40.1,
"used": 3442896896,
"free": 5146566656,
"timestamp": "2019-10-11T13:33:05.673"
}