Я хочу извлечь данные из файла JSON из URL-адреса odata, но я не могу извлечь содержимое с помощью цикла - PullRequest
0 голосов
/ 25 сентября 2018

Ниже приведен файл JSON, на который я ссылаюсь ..

{
  "@odata.context": "https://ac.com/odata/$metadata#ModelVariableDataTypes(Id,ModelVariable,DoubleValues,ModelVariable(Id,Name,UnitOfMeasure,UnitOfMeasure(Name,Abbreviation)),DoubleValues(Id,Value,Timestamp,DataQuality,DataQuality(Id,Name)))",
  "@odata.count": 1,
  "value": [
    {
      "Id": 1928155,
      "ModelVariable": {
        "Id": 1929663,
        "Name": "AccCore_CPULoadProcess",
        "UnitOfMeasure": {
          "Name": "%",
          "Abbreviation": "%"
        }
      },
      "DoubleValues": [
        {
          "Id": 75865549,
          "Value": 0.0,
          "Timestamp": "2018-09-25T03:35:00Z",
          "DataQuality": {
            "Id": 1,
            "Name": "Good"
          }
        },
        {
          "Id": 75865729,
          "Value": 0.0,
          "Timestamp": "2018-09-25T03:40:00Z",
          "DataQuality": {
            "Id": 1,
            "Name": "Good"
          }
        },
        {
          "Id": 75865873,
          "Value": 0.0,
          "Timestamp": "2018-09-25T03:45:00Z",
          "DataQuality": {
            "Id": 1,
            "Name": "Good"
          }
        }
      ]
    }
  ]
}

Я хочу извлечь данные, присутствующие в файле JSON, из URL-адреса odata, но я не могу извлечь содержимое с помощью цикла, как вВ файле JSON счетчик одаток упоминается как 1 (@ odata.count ": 1), поэтому, когда я пытаюсь перехватить все данные с помощью цикла, он не работает.

Я хочу извлечь имеющиеся данныев поле массива doublevalues ​​и хотел показать выходные данные из трех верхних значений процесса CPU.

Я пытаюсь с помощью приведенного ниже кода извлечь данные JSON.

$path= "C:\Users\s.papolu\Desktop\mem.json"
$data = Get-Content -Path 'C:\Users\S.Papolu\Desktop\mem.json' | ConvertFrom-Json 

$maxCount = $data.'@odata.count'
$maxCount

@"
for ($i = 0; $i -lt $maxCount; $i++)
{
$Name = $("{0:N1}" -f $data.value.ModelVariable.Name)
$cpu = $("{$i`:N2}" -f $data.value.DoubleValues.Value)
}

write-host $Name,$cpu

1 Ответ

0 голосов
/ 26 сентября 2018

Я не совсем уверен, что вы спрашиваете здесь.Во-первых, у вас есть посторонний знак at и двойная кавычка.

Здесь MaxCount равен только 1, поэтому цикл запускается только один раз.Однако для каждого элемента вы пытаетесь сохранить результаты в какой-то структуре, а затем показать ее?Какое из DoubleValues ​​вы хотите?Первая тройка?

Это ближе к тому, что вы хотите?

$data = Get-Content -Path $path | ConvertFrom-Json

$maxCount = $data.'@odata.count'
$maxCount

$results = @()

for ($i = 0; $i -lt $maxCount; $i++)
{
    # get the top three doubles values
    $Doubles = @($data.value[$i].DoubleValues | sort -Property Value -Descending | select -first 3)

    $results += [PsCustomObject]@{
        Name = $data.value[$i].ModelVariable[0].Name;
        Cpu = $Doubles;
    }
}

$results | ft
...