在JSON正文中添加时间戳

时间:2019-10-11 09:27:15

标签: json rest powershell api pscustomobject

我对Powershell还是很陌生,还不习惯。我正在尝试在RealTime中远程管理某些服务器。 为此,我使用RestAPI以JSON格式向我发送数据(Powershell会自动将其转换为PSCustomObject)。

问题是JSON /数据API中没有字段时间戳,因此我不得不添加它。不幸的是,PowerShell中的JSON工具似乎很有限,我无法直接添加它。我必须创建一个名为timestamp的新PSCustomObject,并将其与API中的数据结合起来。

不幸的是,然后没有正确解析数据。 我试图遍历一个字符串,一个字符串数组,一个哈希表。这是最糟糕的。 最后,我下载了一个现在正尝试使用的JSON.NET Framework ...

所以这是主要的代码部分:

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"
     }
    ]

1 个答案:

答案 0 :(得分:1)

我认为您正在以错误的方式看待这个问题。为什么不简单地将包含NoteProperty的{​​{1}}添加到DateTime string,然后再将其转换回PSCustomObject格式?

像这样的东西就足够了:

json

这将导致您正在寻找$Json = @" [ { "total": 8589463552, "available": 5146566656, "percent": 40.1, "used": 3442896896, "free": 5146566656 } ] "@ $JsonConverted = $Json | ConvertFrom-Json $AddParams = @{ NotePropertyName = 'timestamp' NotePropertyValue = (Get-Date).ToString('yyyy-MM-ddTHH:mm:ss.fff') } $JsonConverted | Add-Member @AddParams $NewJson = $JsonConverted | ConvertTo-Json $NewJson 对象:

json