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

时间:2017-02-17 04:55:48

标签: arrays json sharepoint sharepoint-online

我正在尝试将一组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变量可能来自哪里,因为我已经确认循环中的每个项目都包含数据(通过写入控制台)。

1 个答案:

答案 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