我有一段代码(向Microsoft团队发送消息的脚本的一部分),它将一些JSON存储在一个变量中:
$body = ConvertTo-Json @{
title = "$($messageTitle)"
text = " "
sections = @(
@{
activityTitle = "$($activityTitle)"
activitySubtitle = " "
activityImage = "$imageLink"
},
@{
title = 'Details'
facts = @(
@{
name = 'Name1'
value = ''
})
potentialAction = @(@{
'@context' = 'http://schema.org'
'@type' = 'ViewAction'
name = 'Button Name'
target = @("https://google.com.au")
}
)
}
)
}
生成此代码时,“事实”部分中的“事实”数量未知。我想使用变量动态地将X个名称/值对添加到此区域中,例如:
facts = @(
$facts
})
在该变量中有多个名称/值对:
@{name='name1',value='value1'},@{name='name2',value='value2'},@{name='name3',value='value3'}
然而,我正在努力使用格式化,到目前为止我没有尝试过,没有引号等组合起作用,结果总是无效的JSON代码。
任何人都可以让我了解将这些值插入代码的最佳方法吗?
我的最新迭代是在插入之前尝试将插入的变量$ facts转换为JSON:
$facts = convertto-json @(
@{
name = 'name1'
value = 'value1'
},
@{
name = 'name2'
value = 'value2'
},
@{
name = 'name3'
value = 'value3'
}
)
$body = ConvertTo-Json @{
title = "$($messageTitle)"
text = " "
sections = @(
@{
activityTitle = "$($activityTitle)"
activitySubtitle = " "
activityImage = "$imageLink"
},
@{
title = 'Details'
facts = @(
$facts
)
potentialAction = @(@{
'@context' = 'http://schema.org'
'@type' = 'ViewAction'
name = 'Button Name'
target = @("https://google.com.au")
}
)
}
)
但是结果失败了,似乎无论我做什么,都会在变量中添加额外的字符:
{
"title": "Test Title",
"sections": [
{
"activitySubtitle": " ",
"activityImage": "http://icons.iconarchive.com/icons/double-j-design/origami-colored-pencil/128/green-ok-icon.png",
"activityTitle": "test Activity"
},
{
"facts": "[\r\n {\r\n \"value\": \"value1\",\r\n \"name\": \"name1\"\r\n },\r\n {\r\n \"value\": \"value2\",\r\n \"name\": \"name2\"\r\n },\r\n {\r\n \"value\": \"value3\",\r\n \"name\": \"name3\"\r\n }\r\n]",
"title": "Details",
"potentialAction": "System.Collections.Hashtable"
}
],
"text": " "
}
非常感谢任何帮助!
编辑:
作为第二个例子(第一个例子很可怕),这是试图将它用作普通字符串:
$facts = '@(
@{
name = "name1"
value = "value1"
},
@{
name = "name2"
value = "value2"
},
@{
name = "name3"
value = "value3"
}
)'
$body = ConvertTo-Json @{
title = "$($messageTitle)"
text = " "
sections = @(
@{
activityTitle = "$($activityTitle)"
activitySubtitle = " "
activityImage = "$imageLink"
},
@{
title = 'Details'
facts = $facts
potentialAction = @(@{
'@context' = 'http://schema.org'
'@type' = 'ViewAction'
name = 'Button Name'
target = @("https://google.com.au")
}
)
}
)
其输出相同,错误的JSON有效负载。
实际的JSON输出是如此格式化:
"facts": "@(\r\n\t\t@{\r\n\t\t\tname = \"name1\"\r\n\t\t\tvalue = \"value1\"\r\n\t\t},\r\n\t\t@{\r\n\t\t\tname = \"name2\"\r\n\t\t\tvalue = \"value2\"\r\n\t\t},\r\n\t\t@{\r\n\t\t\tname = \"name3\"\r\n\t\t\tvalue = \"value3\"\r\n\t\t}\r\n\t)",
我显然没有使用正确的格式化技术组合。
“事实”部分的示例:
facts = @(
@{
name = 'Current State'
value = $($status)
},
@{
name = 'Message'
value = $($message)
},
@{
name = 'Since'
value =$($since)
},
@{
name = 'Last up'
value = $($lastup)
},
@{
name = 'Sensor'
value = $($sensorURL)
},
@{
name = 'Device'
value = $($deviceURL)
},
@{
name = 'Management URL'
value = $($serviceURL)
}
)
答案 0 :(得分:3)
不要将$ facts转换为JSON,将其保留为哈希表数组,
$facts = @(
@{
name = 'name1'
value = 'value1'
},
@{
name = 'name2'
value = 'value2'
},
@{
name = 'name3'
value = 'value3'
}
)
然后务必为转换设置-Depth,
$body = ConvertTo-Json @{
title = "$($messageTitle)"
text = " "
sections = @(
@{
activityTitle = "$($activityTitle)"
activitySubtitle = " "
activityImage = "$imageLink"
},
@{
title = 'Details'
facts = $facts
potentialAction = @(@{
'@context' = 'http://schema.org'
'@type' = 'ViewAction'
name = 'Button Name'
target = @("https://google.com.au")
}
)
}
)
} -Depth 5
我随意挑选了5个,对这样的小任务进行过度评估并没有什么坏处,我确信这已经足够了。
$body > test.json
给我们这样的东西......?
{
"title": "",
"sections": [
{
"activitySubtitle": " ",
"activityImage": "",
"activityTitle": ""
},
{
"facts": [
{
"value": "value1",
"name": "name1"
},
{
"value": "value2",
"name": "name2"
},
{
"value": "value3",
"name": "name3"
}
],
"title": "Details",
"potentialAction": [
{
"@context": "http://schema.org",
"name": "Button Name",
"target": [
"https://google.com.au"
],
"@type": "ViewAction"
}
]
}
],
"text": " "
}