我想打印name个子元素的packageDescription是‘ABC’的Package.

正如您从我的输出中看到的,我在一个数据 struct 中看到了包描述,但我不知道如何从我的管道访问这些值,因此目前没有对包描述进行过滤. 所需的输出是一个简单的姓名列表.

JSON,它来自一个通用的包提要,已经被缩短了很多:

{
    "count":  62,
    "value":  [
                  {
                      "id":  "61979cf2-4ad4-4d6c-b8c7-b67787c4874d",
                      "name":  "pack-de",
                      "versions":  [
                                       {
                                           "id":  "760870c0-5fc5-4453-b7fa-4648cc99bfcb",
                                           "version":  "1.15.0-344001",
                                           "isLatest":  true,
                                           "packageDescription":  "ABC",
                                           "publishDate":  "2023-04-04T14:14:57.5035842Z"
                                       }
                                   ],
                      "_links":  {
                                     "self":  {
                                                  "href":  ""
                                              },
                                     "feed":  {
                                                  "href":  ""
                                              },
                                     "versions":  {
                                                      "href":  ""
                                                  }
                                 }
                  },
                  {
                      "id":  "fea11928-decb-4334-89b6-89915a3e07b9",
                      "name":  "pack-en",
                      "versions":  [
                                       {
                                           "id":  "02a839a1-0d4c-403f-a6c8-ac6e00dec723",
                                           "version":  "1.15.0-344001",
                                           "isLatest":  true,
                                           "packageDescription":  "ABC",
                                           "publishDate":  "2023-04-04T14:15:09.1276991Z"
                                       }
                                   ],
                      "_links":  {
                                     "self":  {
                                                  "href":  ""
                                              },
                                     "feed":  {
                                                  "href":  ""
                                              },
                                     "versions":  {
                                                      "href":  ""
                                                  }
                                 }
                  },
                  {
                      "id":  "a5bb64b7-37c5-4ef4-ae0e-5e95a2a85ae3",
                      "name":  "pack-zh-cn",
                      "versions":  [
                                       {
                                           "id":  "79dee41e-824f-41e5-aa4b-b7126adb8053",
                                           "version":  "1.13.2-343998",
                                           "isLatest":  true,
                                           "packageDescription":  "AZ",
                                           "publishDate":  "2023-04-04T14:11:00.2381001Z"
                                       }
                                   ],
                      "_links":  {
                                     "self":  {
                                                  "href":  ""
                                              },
                                     "feed":  {
                                                  "href":  ""
                                              },
                                     "versions":  {
                                                      "href":  ""
                                                  }
                                 }
                  }
              ]
}

我的PowerShell

$PackageInfo = ConvertFrom-Json -inputObject $myJson
$description = "ABC"
$PackageInfo.value | select name, versions, @{Name = $description; Expression = { ($_.versions.packageDescription | Where-Object $_.packageDescription -eq $description) }}

我得到的当前输出:

name       versions                                                                                                                                             ABC
----       --------                                                                                                                                             ---
pack-de    {@{id=760870c0-5fc5-4453-b7fa-4648cc99bfcb; version=1.15.0-344001; isLatest=True; packageDescription=ABC; publishDate=2023-04-04T14:14:57.5035842Z}}    
pack-en    {@{id=02a839a1-0d4c-403f-a6c8-ac6e00dec723; version=1.15.0-344001; isLatest=True; packageDescription=ABC; publishDate=2023-04-04T14:15:09.1276991Z}}    
pack-zh-cn {@{id=79dee41e-824f-41e5-aa4b-b7126adb8053; version=1.13.2-343998; isLatest=True; packageDescription=AZ; publishDate=2023-04-04T14:11:00.2381001Z}}     

推荐答案

看起来你要找的是filtering而不是selecting,因此你可以用Where-Object:

$description = 'ABC'
(ConvertFrom-Json -InputObject $myJson).value |
    Where-Object { $_.versions.packageDescription -eq $description } |
    ForEach-Object name

对于有问题的Json,这将导致:

pack-de
pack-en

如果你想得到objects而不是values,你可以使用Select-Object,但你需要事先过滤:

$description = 'ABC'
(ConvertFrom-Json -InputObject $myJson).value |
    Where-Object { $_.versions.packageDescription -eq $description } |
    Select-Object name, @{ N='packageDescription'; E={ $_.versions.packageDescription }}

这将导致:

name    packageDescription
----    ------------------
pack-de ABC
pack-en ABC

Json相关问答推荐

我如何知道TJSONNumber是double还是double?

Azure Data Factory JSON输出格式问题

json 字符串到 Postgres 14 中的表视图

如何将属性拆分为嵌套的JSON内容?

使用 jq 和脚本 bash 映射两个 json

派生类的属性没有得到价值

如果值不存在,则将值插入 JSON 数组

JOLT 转换 - 删除 JSON 数组中的空 node

Microsoft GRAPH 查询使用端点 /deviceManagement/deviceHealthScripts 列出了一种不熟悉的检测脚本内容格式

将嵌套的 JSON 对象规范化为 Pandas 数据框

一起使用 Argparse 和 Json

规范化 JSON 文件

Spring MVC:不反序列化 JSON 请求正文

ASP.NET MVC 读取原始 JSON 发布数据

在 Java 中比较两个 JSON 文件的最佳方法

可以在 SharedPreferences 中保存 JSON 数组吗?

Javascript:如何判断 AJAX 响应是否为 JSON

如何在 JAVA 中对 JSONArray 进行排序

NSURLRequest 中不支持的 URL

按键值过滤 JSON