我正在尝试将一组SharePoint列表项(和关联数据)转换为JSON对象。为此,我尝试创建一个多维数组,然后迭代我的SharePoint对象来填充它。
这是迄今为止的相关代码:
#Lookup Source Address
$rootWeb = $Context.Web
$List = $rootWeb.lists.getByTitle($ListName)
$fields = $List.Fields;
$ListItems = $List.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery())
#Load the List
$Context.Load($rootWeb)
$Context.Load($List)
$Context.Load($ListItems)
$context.Load($fields)
$Context.ExecuteQuery()
$listArray = @()
$listArray["DisplayTitle"] = @()
$listArray["Description"] = @()
$listArray["Setting"] = @()
$listArray["HealthAreas"] = @()
$listArray["ResourceType"] = @()
$listArray["ExternalURL"] = @()
$listArray["Active"] = @()
Write-Host "List items are"
foreach ($item in $ListItems)
{
$listArray["DisplayTitle"].Add($item["Title"])
$listArray["Description"].Add($item["File Description"])
$listArray["Setting"].Add($item["Setting"])
$listArray["HealthAreas"].Add($item["Health_x0020_Area"])
$listArray["ResourceType"].Add($item["Resource_x0020_Type"])
$listArray["ExternalURL"].Add($item["External_x0020_file_x0020_path"])
$listArray["Active"].Add($item["Currently_x0020_active_x003f_"])
}
Write-Host "############################"
Write-Host $listArray | ConvertTo-Json
我知道我的想法存在差距(也许我需要哈希表),但却看不到它。我收到的错误是:
您无法在空值表达式上调用方法。
但是我无法看到我的null变量可能来自哪里,因为我已经确认循环中的每个项目都包含数据(通过写入控制台)。
答案 0 :(得分:2)
您收到的错误与SharePoint无关,而与PowerShell无关。您创建了PowerShell数组并尝试访问其元素,就像它是关联数组/哈希表。
请尝试使用此代码(我已经使用我自己的列表测试了不同的列名称并且工作正常):
#Lookup Source Address
$rootWeb = $Context.Web
$List = $rootWeb.lists.getByTitle($ListName)
$fields = $List.Fields;
$ListItems = $List.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery())
#Load the List
$Context.Load($rootWeb)
$Context.Load($List)
$Context.Load($ListItems)
$context.Load($fields)
$Context.ExecuteQuery()
$listArray = New-Object System.Collections.Generic.List[System.Object]
Write-Host "List items are"
foreach ($item in $ListItems)
{
$listArray.Add([hashtable]@{
DisplayTitle=$item["Title"];
Description= $item["File Description"];
Setting= $item["Setting"];
HealthAreas= $item["Health_x0020_Area"];
ResourceType= $item["Resource_x0020_Type"];
ExternalURL= $item["External_x0020_file_x0020_path"];
Active= $item["Currently_x0020_active_x003f_"];
}
)
}
Write-Host "############################"
$json = $listArray | ConvertTo-Json
Write-Host $json