我无法使用ConvertFrom-Json将PowerShell中使用curl接收到的GET响应转换为数组。该请求正在从Web应用程序中提取用户列表。几个JSON验证器说JSON是有效的(FWIW)。结果看起来像是从JSON转换的数据被塞进了数组中的一个元素。
JSON示例:
{"adRecordsSize":0,"azureRecordSize":0,"manualRecordsSize":76,"records":[{"id":"0-0","key":"someone","position":0,"sourceType":"Manual"},{"id":"0-1","key":"someone1","position":1,"sourceType":"Manual"},{"id":"0-2","key":"someone2","position":2,"sourceType":"Manual"},{"id":"0-3","key":"someone3","position":3,"sourceType":"Manual"}],"tisRecordsSize":0}
我正在寻找的结果是一个我可以使用的数组,类似于这样(实际上我需要的只是用户名):
id key position sourceType
0-0 someone 0 Manual
0-1 someone1 1 Manual
0-2 someone2 2 Manual
0-3 someone3 3 Manual
下面是我尝试的第一个代码,它至少产生了一些东西:
$request = @()
$request= curl.exe -H "Csrf-Token:nocheck" -H $token -H "Content-Type: application/json" -H "Accept: application/json" $uri | ConvertFrom-Json
$request
下面的结果看起来像是所有的东西都被塞进了一个元素或属性中(请原谅我缺乏术语),但是我期望的是一个数组,它包含了我从中提取的表中的每个项目的元素。或者这是ConvertFrom-Json没有像它应该的那样分割的多个元素吗?:
adRecordsSize : 0
azureRecordSize : 0
manualRecordsSize : 3
records : {@{id=0-0; key=someone; position=0; sourceType=Manual}, @{id=0-1; key=someone1; position=1; sourceType=Manual}, @{id=0-2; key=someone2; position=2; sourceType=Manual}, @{id=0-3; key=someone3; position=3;
sourceType=Manual}...}
tisRecordsSize : 0
所以我试着:
$request = curl.exe -H "Csrf-Token:nocheck" -H $token -H "Content-Type: application/json" -H "Accept: application/json" $uri | Select-Object -Property records | ConvertFrom-Json
这将导致空数组。我在管道中将select-object命令更改为“Select-Object -Property *”:同样的空数组。
现在我试着这样做:
$request = curl.exe -H "Csrf-Token:nocheck" -H $token -H "Content-Type: application/json" -H "Accept: application/json" $uri
$data = ConvertFrom-Json -InputObject $request
$data
结果和我尝试的第一步一样!
所以现在这个:
$request = [System.Collections.ArrayList]@()
$request = curl.exe --request GET -H "Csrf-Token:nocheck" -H $token -H "Content-Type: application/json" -H "Accept: application/json" $uri | Select-Object -Property * | ConvertFrom-Json
$request
结果:"ConvertFrom-Json : Invalid JSON primitive: ."
我尝试了其他一些排列,包括在ConvertFrom-Json之前使用Out-String,但没有成功。有没有人有办法解决这个问题??
1条答案
按热度按时间ohtdti5x1#
正如注解中提到的,这只是PowerShell试图通过显示实际存储在
records
属性中的更复杂对象的紧凑字符串表示来提供帮助。如果让它只显示
records
值,您将确切地看到您要查找的内容: