Укажите полный путь к файлу внутри JSON - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу использовать файл JSON для хранения параметров моего скрипта powershell. Немногие из атрибутов JSON имеют полные пути к файлам в качестве значений.

https://jsonlint.com/ показывает, что JSON действителен. Однако ConvertFrom-Json выдает командлет и выдает ошибку.

enter image description here

Пожалуйста, помогите мне исправить этот разбор JSON.

JSON:

    {
  "region": "US",
  "proxy_address_exception_list": "1.1.1.1; 2.2.2.2",
  "dsvm_ip_address": "10.1.1.1",
  "svm_ip_address": "10.2.2.2",
  "url_without_xto": "abc.com",
  "url_with_xto": "def-xto.com",
  "web_server_farm_name": "dss",
  "full_path_to_requestrouter_amd64_msi": "c:\\script_downloads\\requestrouter.msi",
  "full_path_to_rewrite_amd64_en_US_msi": "c:\\script_downloads\\rewrite.msi",
  "full_path_to_webfarm_v1_1_amd64_en_US_msi" : "c:\\script_downloads\\webfarm.msi",
  "full_path_to_application_host_config": "c:\\script_downloads\\applicationHost.config"
}

Код PowerShell:

# Get parameter_list from file 
$parameter_list_json = Get-Content -Path "C:\Users\manjug\Desktop\Visualization_Automation\parameters.json" -Raw
$parameter_list = ConvertFrom-Json $parameter_list_json

Ошибка:

PS C:\Users\manjug\Desktop> # Get parameter_list from file 
$parameter_list_json = Get-Content -Path "C:\Users\manjug\Desktop\Visualization_Automation\parameters.json" -Raw
$parameter_list = ConvertFrom-Json $parameter_list_json
ConvertFrom-Json : Unrecognized escape sequence. (293): {
  "region": "US",
  "proxy_address_exception_list": "1.1.1.1; 2.2.2.2",
  "dsvm_ip_address": "10.1.1.1.",
  "svm_ip_address": "10.2.2.2",
  "url_without_xto": "abc.com",
  "url_with_xto": "def-xto.com",
  "web_server_farm_name": "dss",
  "full_path_to_requestrouter_amd64_msi": "c:\script_downloads\requestrouter_amd64_msi",
  "full_path_to_rewrite_amd64_en_US_msi": "c:\script_downloads\rewrite_amd64_en_US_msi",
  "full_path_to_webfarm_v1_1_amd64_en_US_msi" : "c:\script_downloads\webfarm_v1_1_amd64_en_US_msi",
  "full_path_to_application_host_config": "c:\script_downloads\applicationHost.config"
}
At line:3 char:19
+ $parameter_list = ConvertFrom-Json $parameter_list_json
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

1 Ответ

2 голосов
/ 08 ноября 2019

В этой строке пропущен escape:

"full_path_to_requestrouter_amd64_msi": "c:\script_downloads\\requestrouter.msi",

Сразу после c:. Это должно быть c:\\script. Как только вы исправите это, это работает:

$json = @"
{
  "region": "US",
  "proxy_address_exception_list": "1.1.1.1; 2.2.2.2",
  "dsvm_ip_address": "10.1.1.1",
  "svm_ip_address": "10.2.2.2",
  "url_without_xto": "abc.com",
  "url_with_xto": "def-xto.com",
  "web_server_farm_name": "dss",
  "full_path_to_requestrouter_amd64_msi": "c:\\script_downloads\\requestrouter.msi",
  "full_path_to_rewrite_amd64_en_US_msi": "c:\\script_downloads\\rewrite.msi",
  "full_path_to_webfarm_v1_1_amd64_en_US_msi" : "c:\\script_downloads\\webfarm.msi",
  "full_path_to_application_host_config": "c:\\script_downloads\\applicationHost.config"
}
"@

$x = $json | ConvertFrom-Json

$x

region                                    : US
proxy_address_exception_list              : 1.1.1.1; 2.2.2.2
dsvm_ip_address                           : 10.1.1.1
svm_ip_address                            : 10.2.2.2
url_without_xto                           : abc.com
url_with_xto                              : def-xto.com
web_server_farm_name                      : dss
full_path_to_requestrouter_amd64_msi      : c:\script_downloads\requestrouter.msi
full_path_to_rewrite_amd64_en_US_msi      : c:\script_downloads\rewrite.msi
full_path_to_webfarm_v1_1_amd64_en_US_msi : c:\script_downloads\webfarm.msi
full_path_to_application_host_config      : c:\script_downloads\applicationHost.config
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...