#json #powershell
Вопрос:
Я создал сценарий PowerShell для возврата значений из веб-URL с данными JSON.
Мой скрипт теперь возвращает HTML с некоторыми данными JSON.
Теперь я хочу получить значение из данных JSON, содержащихся в этом HTML.
В частности, значение для ‘ID.ad_user’, где объявлена переменная данных («данные var = «).
Итак, «345345-3453-gfdd-44334» — это значение, которое мне нужно (исключая текст «ad_user://»).
Вот мой код PowerShell:
$cred = "[my unique token]" $headers = @{ Authorization = "Bearer $cred" } $Output = Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "[my URL]" $Output
Вот вывод HTML и JSON:
lt;!DOCTYPE htmlgt; lt;!-- If you are reading this, there is a good chance you would prefer sending an "Accept: application/json" header and receiving actual JSON responses. --gt; lt;link rel="stylesheet" type="text/css" href="/ui.min.css" /gt; lt;script src="/ui.min.js"gt;lt;/scriptgt; lt;scriptgt; var user = "admin"; var curlUser='[HIDDEN]'; var data = {"name": "Pat McKinnon","ID": ["ad_user://345345-3453-gfdd-44334","local://p-345dd455"],"state": "active",} lt;/scriptgt;
Комментарии:
1. «Вот вывод JSON» — это не JSON, это HTML…
2. @Матиас Р. Джессен — ты прав. Я должен был сказать, что вывод HTML с данными JSON, содержащимися внутри. Позвольте мне обновить это.
3. Вы видели комментарий в реальном HTML-коде?
If you are reading this, there is a good chance you would prefer sending an "Accept: application/json" header and receiving actual JSON responses.
Так почему бы не сделать это, получив не HTML-код со встроенным JSON, а просто ответ JSON, который вы можете использоватьConvertFrom-Json
.4. спасибо, Тео. Как бы я реализовал преобразование из-Json в свой код? Можете ли вы поделиться примером?
5. Вероятно, добавив это в хэш-таблицу заголовков:
$headers = @{ Authorization = "Bearer $cred"; Accept = "application/json" }
. Тогда посмотрите, что$Output
будет послеInvoke-RestMethod
. Если это действительно JSON, вы можете просто сделать$Output | ConvertFrom-Json
и проложить свой путь оттуда
Ответ №1:
Может быть, это сработает. Найдите часть строки, содержащую данные JSON, а затем преобразуйте ее в объект.
$result = $Output | Select-String -Pattern "var data = {. }`n" $lineWithData = $result.Matches.Value $lineWithData $json = $lineWithData.Substring('var data = '.Length) $json $dataObject = $json | ConvertFrom-Json $dataObject
Затем вы можете получить свойство ID от объекта.
$dataObject.ID ad_user://345345-3453-gfdd-44334 local://p-345dd455```
Комментарии:
1. При запуске я получаю следующую ошибку: «‘ Вы не можете вызвать метод для выражения с нулевым значением. В строке:12 символ:1 $json = $Строка с данными.Подстрока(‘данные var = ‘.Длина) «‘
2. Похоже
$Output
, переменная не содержит строки с ожидаемым шаблоном, что приводит к нулевому совпадению, и поэтому переменная$lineWithData
равна нулю.