2013-08-16 1 views
1

Я пытаюсь использовать Zabbix JSON API для автоматизации некоторых элементов мониторинга в нашем ИТ-магазине. Я хотел бы использовать метод graph.create, описанный здесь: https://www.zabbix.com/documentation/2.2/manual/api/reference/graph/createхэш-таблицы в массивах .... и JSON

Я борюсь с массивом gitems. Он должен содержать хэш-таблицы (по одному на элемент в графике), каждый из которых имеет строки «itemid» и «color».

Это часть моего кода:

#i get a list of itemids in $items 
[email protected]("C04000", "800000", "191970", "3EB489", [...]) 
[email protected]{} 
     [email protected]() #an array of hash tables... 

     $c=0 
     foreach ($itemid in $items.result) { 
      [email protected]{} 
      $graphmember.add("itemid", $itemid) 
      $graphmember.add("color", $colours[$c]) 
      $gitems += $graphmember 
      $c += 1 
     } 
     $params.add("gitems", $gitems) 

     #construct the JSON object 
     $objgraph = (New-Object PSObject | Add-Member -PassThru NoteProperty jsonrpc '2.0' | 
     Add-Member -PassThru NoteProperty method 'graph.create' | 
     Add-Member -PassThru NoteProperty params $params | 
     Add-Member -PassThru NoteProperty auth $session.result | 
     Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json 

     return $objgraph 

который, когда называют возвращает это:

{ 
    "jsonrpc": "2.0", 
    "method": "graph.create", 
    "params": { 
        "gitems": [ 
            "System.Collections.Hashtable", 
            "System.Collections.Hashtable", 
            "System.Collections.Hashtable", 
            "System.Collections.Hashtable", 
            "System.Collections.Hashtable" 
           ] 
       }, 
    "auth": "dc50acf4c337e5430c00936f998f74da", 
    "id": "2" 
} 

Так я получаю 5 строк, что правильное число на основе аргументов я поставляемых, но похоже, что convertto-json не любит мой объект ... не могу понять, почему.

Я не был уверен, что хэш-таблицы в массив вещи, так что я сделал тест, и это, кажется, работает:

[email protected]() 
[email protected]{} 
$1.add("itemid","123") 
$i1.add("color","blue") 
$gitems += $i1 
[email protected]{} 
$i2.add("itemid","567") 
$i2.add("color","yellow") 
$gitems += $i2 

$gitems 

Name       Value 
----       ----- 
color       bleu 
itemid       123 
color       yellow 
itemid       567 

Спасибо за идеи людей!

+0

Кажется похож на [это] (http://stackoverflow.com/questions/17929494/powershell-v3-convertto -json-с вложенной-Hashtable) –

ответ

2

Параметр depth указывает, сколько уровней содержащихся объектов включено в представление JSON. Значение по умолчанию равно 2. Если задать значение 3, то JSON будет успешно создано:

$objgraph = (New-Object PSObject | Add-Member -PassThru NoteProperty jsonrpc '2.0' | 
Add-Member -PassThru NoteProperty method 'graph.create' | 
Add-Member -PassThru NoteProperty params $params | 
Add-Member -PassThru NoteProperty auth $session.result | 
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json -depth 3 
Смежные вопросы