Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用powershell正确格式化json dict对象_Json_Powershell - Fatal编程技术网

使用powershell正确格式化json dict对象

使用powershell正确格式化json dict对象,json,powershell,Json,Powershell,请原谅我在使用powershell时完全无能。我并不是一个真正的windows迷,我发现自己处于一个棘手的境地。我需要做的是使用一个名为optionConfig.json的json配置文件,该文件包含一个dict,根据我拥有的任何键,我假设列表中的元素(该键的值)是系统上的环境变量,我需要找到它们的值。以下是配置内容 {"test1": ["options_size", "options_connection", "options_object"], "test2":["options_cus

请原谅我在使用powershell时完全无能。我并不是一个真正的windows迷,我发现自己处于一个棘手的境地。我需要做的是使用一个名为
optionConfig.json
的json配置文件,该文件包含一个dict,根据我拥有的任何键,我假设列表中的元素(该键的值)是系统上的环境变量,我需要找到它们的值。以下是配置内容

{"test1": ["options_size", "options_connection", "options_object"],
 "test2":["options_customArgs", "options_noUDP", "options_noName"]}
在这个例子中,我会说

$env:options_size = 'size1'
$env:options_connection = 'conn1'
$env:options_object = 'obj1'
我知道我将在系统上有一个名为
test
的环境变量,它的值将是json对象中的某个键。这是我到目前为止所拥有的

# Read the JSON file into a custom object.
$configObj = Get-Content -Raw C:\TestWare\carstenSample\optionsConfig.json | 
ConvertFrom-Json

# Retrieve the environment variables whose
# names are listed in the $env:test property
# as name-value pairs.
Get-Item -Path env:* -Include $configObj.$env:testTool
此外,这段代码将环境变量转换为Json,但格式我不喜欢

Get-Item -Path env:* -Include $configObj.$env:testTool |
  Select-Object Name, Value | ConvertTo-Json
这是输出

[
  {
    "Name": "options_connection",
    "Value": "conn1"
  },
  {
    "Name": "options_object",
    "Value": "obj1"
  },
  {
    "Name": "options_size",
    "Value": "size1"
  }
]
有没有一种方法可以修改Json,或者它们是将这些env变量转换为Json的另一种方法,这样我的Json对象就可以像这样了?任何帮助都将不胜感激。谢谢

{
    "options_size": "size1",
    "options_connection": "conn1",
    "options_object": "obj1"
}

我设法将您的示例转换为自检示例。结果如下:

#your options
$env:options_size = 'size1'
$env:options_connection = 'conn1'
$env:options_object = 'obj1'

#your key in configuration
$env:testTool = "test1"

#your configuration (in memory to simplify)
$configObj = '{"test1": ["options_size", "options_connection", "options_object"],
 "test2":["options_customArgs", "options_noUDP", "options_noName"]}' | ConvertFrom-Json

#convert object to hashtable
Get-Item -Path env:* -Include $configObj.$env:testTool |
  % {$hash = @{}} {$hash[$_.Name]=$_.Value} {$hash} | ConvertTo-Json
返回格式良好的JSON:

{
    "options_size":  "size1",
    "options_object":  "obj1",
    "options_connection":  "conn1"
}

我设法将您的示例转换为自检示例。结果如下:

#your options
$env:options_size = 'size1'
$env:options_connection = 'conn1'
$env:options_object = 'obj1'

#your key in configuration
$env:testTool = "test1"

#your configuration (in memory to simplify)
$configObj = '{"test1": ["options_size", "options_connection", "options_object"],
 "test2":["options_customArgs", "options_noUDP", "options_noName"]}' | ConvertFrom-Json

#convert object to hashtable
Get-Item -Path env:* -Include $configObj.$env:testTool |
  % {$hash = @{}} {$hash[$_.Name]=$_.Value} {$hash} | ConvertTo-Json
返回格式良好的JSON:

{
    "options_size":  "size1",
    "options_object":  "obj1",
    "options_connection":  "conn1"
}