2017-02-17 2 views
2

Я пытаюсь преобразовать набор элементов списка SharePoint (и связанных данных) в объект JSON. Для этого я пытаюсь создать многомерный массив, а затем перебирать объекты SharePoint для его заполнения.Преобразование списка SharePoint в JSON с использованием массивов

Это соответствующий код до сих пор:

#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 

Я знаю, что есть пробел в моем мышлении здесь (может быть, мне нужно хэш-таблицу), но просто не могу видеть его. Ошибка, которую я получаю:

Вы не можете вызвать метод для выражения с нулевым значением.

Однако я не вижу, откуда моя нулевая переменная может возникнуть, поскольку я подтвердил, что каждый элемент цикла содержит данные (путем записи на консоль).

ответ

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 
Смежные вопросы