2017-09-15 29 views
-1

儘管我的對象是合法的Json,但ConvertFrom-Json無法成功地將我的Json解析爲對象。Powershell ConvertFrom-Json吃節點

我正在使用最新版本的Powershell。

當我試圖解析一個谷歌的請求JSON的身體是這樣的:

{ 
    "reportScope": { 
         "agencyId": "11111111111111111", 
         "advertiserId": "22222222222222222" 
        }, 
    "reportType": "adGroup", 
    "columns": [ 
        { 
         "columnName": "status" 
        }, 
        { 
         "columnName": "date" 
        }, 
        { 
         "columnName": "account" 
        }, 
        { 
         "columnName": "accountType" 
        }, 
        { 
         "columnName": "campaign" 
        }, 
        { 
         "columnName": "adGroup" 
        }, 
        { 
         "columnName": "deviceSegment" 
        }, 
        { 
         "columnName": "impr" 
        }, 
        { 
         "columnName": "clicks" 
        }, 
        { 
         "columnName": "dfaRevenue" 
        }, 
        { 
         "columnName": "cost" 
        }, 
        { 
         "columnName": "avgPos" 
        } 
       ], 
    "timeRange": { 
         "startDate": "2017-09-13", 
         "endDate": "2017-08-14" 
        }, 
    "filters": [ 
        { 
         "column": {"columnName": "impr"}, 
         "operator": "greaterThan", 
         "values": "0" 
        } 
       ], 
    "downloadFormat": "csv", 
    "maxRowsPerFile": 6000000, 
    "statisticsCurrency": "agency", 
    "verifySingleTimeZone": "false", 
    "includeRemovedEntities": "false" 
} 

我得到一個對象是這樣的:

[DBG]: PS Microsoft.PowerShell.Core\FileSystem::\\psDashboard>> $objJson 


reportScope   : @{agencyId=11111111111111111; advertiserId=22222222222222222} 
reportType    : adGroup 
columns    : {@{columnName=status}, @{columnName=date}, @{columnName=account}, @{columnName=accountType}...} 
timeRange    : @{startDate=2017-09-13; endDate=2017-08-14} 
filters    : {@{column=; operator=greaterThan; values=0}} 
downloadFormat   : csv 
maxRowsPerFile   : 6000000 
statisticsCurrency  : agency 
verifySingleTimeZone : false 
includeRemovedEntities : false 




[DBG]: PS Microsoft.PowerShell.Core\FileSystem::\\psDashboard>> $objJson.filters 

column operator values 
------ -------- ------ 
     greaterThan 0  

通知column應該包含@{columnNane=imgr}但它而是包含什麼。用於解析

代碼:

$objJson = Get-Content -Path $FileName -Raw | ConvertFrom-Json 

任何想法?

+1

我的最終沒有問題(Powershell 5在Windows 10上)。我確實得到了@ {columnName = impr} ...我確實把你的請求放在一個文件中,並用你的解析行導入它。 –

回答

1

我把你的代碼,並能夠得到你正在尋找的對象我首先把它放在這裏string @「」@,並能夠得到它..然後像你​​我把它放在一個變量並通過管道轉換從JSON並獲得了Ame結果。

$test = @" 
{ 
    "reportScope": { 
         "agencyId": "11111111111111111", 
         "advertiserId": "22222222222222222" 
        }, 
    "reportType": "adGroup", 
    "columns": [ 
        { 
         "columnName": "status" 
        }, 
        { 
         "columnName": "date" 
        }, 
        { 
         "columnName": "account" 
        }, 
        { 
         "columnName": "accountType" 
        }, 
        { 
         "columnName": "campaign" 
        }, 
        { 
         "columnName": "adGroup" 
        }, 
        { 
         "columnName": "deviceSegment" 
        }, 
        { 
         "columnName": "impr" 
        }, 
        { 
         "columnName": "clicks" 
        }, 
        { 
         "columnName": "dfaRevenue" 
        }, 
        { 
         "columnName": "cost" 
        }, 
        { 
         "columnName": "avgPos" 
        } 
       ], 
    "timeRange": { 
         "startDate": "2017-09-13", 
         "endDate": "2017-08-14" 
        }, 
    "filters": [ 
        { 
         "column": {"columnName": "impr"}, 
         "operator": "greaterThan", 
         "values": "0" 
        } 
       ], 
    "downloadFormat": "csv", 
    "maxRowsPerFile": 6000000, 
    "statisticsCurrency": "agency", 
    "verifySingleTimeZone": "false", 
    "includeRemovedEntities": "false" 
} 
"@ 
$t = $test | ConvertFrom-Json 

$t.filters.column 

PS C:\WINDOWS\system32> $t.filters 

column    operator values 
------    -------- ------ 
@{columnName=impr} greaterThan 0  



PS C:\WINDOWS\system32> $t.filters.column 

columnName 
---------- 
impr 

使用獲取內容並使用convertfrom-json。

PS C:\WINDOWS\system32>  $test.filters 

column    operator values 
------    -------- ------ 
@{columnName=impr} greaterThan 0  



PS C:\WINDOWS\system32>  $test.filters.column 

columnName 
---------- 
impr  

可能成爲你convertFrom JSON的版本我的模塊的版本是:

PS C:\ WINDOWS \ SYSTEM32> GCM convertfrom JSON的

的CommandType名稱版本源
--- -------- ---- ------- ------
Cmdlet ConvertFrom -Json 3.1.0.0 Microsoft.PowerShell.Utility

+0

你好,我實際上在Python bug線程中找到了答案。事實證明,與其他對象一樣,當一個字符串被放入ConvertFrom-JSON中時,它會丟棄任何單個項目數組 - 這很奇怪,但是他們在Python錯誤日誌中說,這是購買設計。將我的Get-Contents放在一個變量中,然後將該變量放在ConvertFrom-Json(即無管道)中後,它就可以工作了。我寧願不回答我自己的問題,既然你已經走在正確的軌道上,你會介意打字嗎?如果你確實,我會把它記下來。 –