使用数组将 SharePoint Online 列表转换为 JSON

Convert a SharePoint Online list into JSON using arrays

我正在尝试将一组 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

我知道我的想法在这里存在差距(也许我需要一个哈希表)但就是看不到它。我收到的错误是:

You cannot call a method on a null-valued expression.

但是我看不到空变量的来源,因为我已经确认循环中的每个项目都包含数据(通过写入控制台)。

您收到的错误与 SharePoint 无关,而是与 PowerShell 相关。您创建了 PowerShell 数组并尝试访问它的元素,就像它是关联的一样 array/hashtable。

请试试这个代码(我已经用我自己的列表用不同的列名测试过它,它工作正常):

#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