Ad Widget

Collapse

Обнаружение Value should be a JSON object

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sashok60
    Junior Member
    • Oct 2016
    • 2

    #1

    Обнаружение Value should be a JSON object

    есть шаблон в нем правило обнаружения по скрипту powershell.
    скрипт выводит данные:
    Code:
    {
     "data":[
    
     { "{#VMNAME}":"1C_2012" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"ArhivKam" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"Consultant" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"docer" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"ServiceDesk (work)" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"SMPP" , "{#VMSTATE}":"Off" },
     { "{#VMNAME}":"SUD" , "{#VMSTATE}":"Off" },
     { "{#VMNAME}":"Verdox-aus" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"v-fs-01" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"v-sp-01" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"WebAppProd" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"WebSrv" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"WSUS" , "{#VMSTATE}":"Running" },
     { "{#VMNAME}":"Zabbix 3.2" , "{#VMSTATE}":"Running" },
    
     ]
    }
    Но заббикс (3,2) упорно не хочет принимать эти данные, пишет Value should be a JSON object.
    Подскажите в чем может быть проблема?
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    В лишней запятой в конце последней строки:
    { "{#VMNAME}":"Zabbix 3.2" , "{#VMSTATE}":"Running" },
    А вообще, json можно проверить на ресурсах типа http://jsonlint.com/

    Comment

    • narmo
      Junior Member
      • Nov 2016
      • 20

      #3
      Столкнулся с такой же проблемой, но в разрезе мониторинга CSV через темплейт:

      $csvfs = Get-WmiObject win32_PerfFormattedData_CsvFsPerfProvider_ClusterC SVFileSystem| Select Name
      $idx = 1
      write-host "{"
      write-host " `"data`":[`n"
      foreach ($perfcsvfs in $csvfs)
      {
      if ($idx -lt $csvfs.Count)
      {
      $line= "{ `"{#CSVFS}`" : `"" + $perfcsvfs.Name + "`" },"
      write-host $line
      }
      elseif ($idx -ge $csvfs.Count)
      {
      $line= "{ `"{#CSVFS}`" : `"" + $perfcsvfs.Name + "`" }"
      write-host $line
      }
      $idx++;
      }
      write-host
      write-host " ]"
      write-host "}"

      Comment

      • karik-himik
        Senior Member
        • Oct 2015
        • 116

        #4
        Я так понимаю Вы сам PS скрипт из интернета взяли и немного переделали ?
        Если да, то там в самом начале была функция convert-encoding.
        Объявите её в начале файла:

        function convertto-encoding ([string]$from, [string]$to){
        begin{
        $encfrom = [system.text.encoding]::getencoding($from)
        $encto = [system.text.encoding]::getencoding($to)
        }
        process{
        $bytes = $encto.getbytes($_)
        $bytes = [system.text.encoding]::convert($encfrom, $encto, $bytes)
        $encto.getstring($bytes)
        }
        }

        И передайте значения $line по конвейеру в функцию convertto-encoding:
        $line= "{ `"{#CSVFS}`" : `"" + $perfcsvfs.Name + "`" }," | convertto-encoding "cp866" "utf-8"

        P.S.: Вместо "cp866" само-собой подставьте Вашу codepage (в коммандной строке введите: chcp)
        После этого вывод скрипта проверьте на сайте, который подсказал Semiadmin и если всё ОК, то всё должно заработать.

        Comment

        Working...