到目前为止,我已经能够成功地解析一些JSON,但无法访问特定对象:

我的总体代码如下:

$myFile = Get-Content -Raw -Path UKStore.json | ConvertFrom-Json

$counter = 0
foreach ($link in $myFile.links)
{
    Write-Host $link.id "and" $link.name
    Write-Host $link.default_sku
    $counter+=1

}

Write-Host $counter
Read-Host -Prompt "Press Enter to exit"

现在,我在每次迭代中得到的结果如下所示.因此,第1行很好,正在输出我需要的内容,但第2行需要进一步处理:

EP9000-NPEE00001_00-GCRASHBAND000001 and Crash Bandicoot®

@{amortizeFlag=False; bundleExclusiveFlag=False; chargeImmediatelyFlag=False; charge_type_id=0; credit_card_required_flag=0; defaultSku=True; display_price=£3.99; eligibilities=System.Object[]; entitlements=System.Object[]; id=EP9000-NPEE00001_00-GCRASHBAND000001-EE03; is_original=False; name=Full Game; platforms=System.Object[]; price=399; rewards=System.Object[]; seasonPassExclusiveFlag=False; skuAvailabilityOverrideFlag=False; sku_type=0; type=standard}

我只是不能,无论我try 使用什么符号来访问"$link.default_sku"中的属性,我显然没有正确地连接到我大脑中的某些东西,但我感觉到:

$link.default_sku.display_price

应该从上面的对象中给我值GB 3.99,但我却什么也得不到.任何帮助克服这种精神障碍的人都是很棒的.

Went a level higher for Format-Custom

$link | Format-Custom

输出:

class PSCustomObject
    {
      bucket = games
      container_type = product
      content_type = 1
      default_sku = @{amortizeFlag=False; bundleExclusiveFlag=False; chargeImmediatelyFlag=False; charge_type_id=0;
      credit_card_required_flag=0; defaultSku=True; display_price=£24.99; eligibilities=System.Object[];
      entitlements=System.Object[]; id=EP2595-CUSA07370_00-0001000100010001-E001; is_original=False; name=Full Game;
      platforms=System.Object[]; price=2499; rewards=System.Object[]; seasonPassExclusiveFlag=False;
      skuAvailabilityOverrideFlag=False; sku_type=0; type=standard}
      gameContentTypesList =
      game_contentType = Full Game
      id = EP2595-CUSA07370_00-0001000100010001
      images =
      name = Past Cure™
      playable_platform = PS4™
      provider_name = Phantom 8 Studio UG
      release_date =
        class DateTime
        {
          Date =
            class DateTime
            {
              Date =
                class DateTime
                {
                  Date =
                    class DateTime
                    {
                      Date =
                        class DateTime
                        {
                          Date = 23/02/2018 00:00:00
                          Day = 23
                          DayOfWeek = Friday
                          DayOfYear = 54
                          Hour = 0
                          Kind = Utc
                          Millisecond = 0
                          Minute = 0
                          Month = 2
                          Second = 0
                          Ticks = 636549408000000000
                          TimeOfDay = 00:00:00
                          Year = 2018
                          DateTime = 23 February 2018 00:00:00
                        }
                      Day = 23
                      DayOfWeek = Friday
                      DayOfYear = 54
                      Hour = 0
                      Kind = Utc
                      Millisecond = 0
                      Minute = 0
                      Month = 2
                      Second = 0
                      Ticks = 636549408000000000
                      TimeOfDay =
                        class TimeSpan
                        {
                          Ticks = 0
                          Days = 0
                          Hours = 0
                          Milliseconds = 0
                          Minutes = 0
                          Seconds = 0
                          TotalDays = 0
                          TotalHours = 0
                          TotalMilliseconds = 0
                          TotalMinutes = 0
                          TotalSeconds = 0
                        }
                      Year = 2018
                      DateTime = 23 February 2018 00:00:00
                    }
                  Day = 23
                  DayOfWeek = Friday
                  DayOfYear = 54
                  Hour = 0
                  Kind = Utc
                  Millisecond = 0
                  Minute = 0
                  Month = 2
                  Second = 0
                  Ticks = 636549408000000000
                  TimeOfDay =
                    class TimeSpan
                    {
                      Ticks = 0
                      Days = 0
                      Hours = 0
                      Milliseconds = 0
                      Minutes = 0
                      Seconds = 0
                      TotalDays = 0
                      TotalHours = 0
                      TotalMilliseconds = 0
                      TotalMinutes = 0
                      TotalSeconds = 0
                    }
                  Year = 2018
                  DateTime = 23 February 2018 00:00:00
                }
              Day = 23
              DayOfWeek = Friday
              DayOfYear = 54
              Hour = 0
              Kind = Utc
              Millisecond = 0
              Minute = 0
              Month = 2
              Second = 0
              Ticks = 636549408000000000
              TimeOfDay =
                class TimeSpan
                {
                  Ticks = 0
                  Days = 0
                  Hours = 0
                  Milliseconds = 0
                  Minutes = 0
                  Seconds = 0
                  TotalDays = 0
                  TotalHours = 0
                  TotalMilliseconds = 0
                  TotalMinutes = 0
                  TotalSeconds = 0
                }
              Year = 2018
              DateTime = 23 February 2018 00:00:00
            }
          Day = 23
          DayOfWeek = Friday
          DayOfYear = 54
          Hour = 0
          Kind = Utc
          Millisecond = 0
          Minute = 0
          Month = 2
          Second = 0
          Ticks = 636549408000000000
          TimeOfDay =
            class TimeSpan
            {
              Ticks = 0
              Days = 0
              Hours = 0
              Milliseconds = 0
              Minutes = 0
              Seconds = 0
              TotalDays = 0
              TotalHours = 0
              TotalMilliseconds = 0
              TotalMinutes = 0
              TotalSeconds = 0
            }
          Year = 2018
          DateTime = 23 February 2018 00:00:00
        }
      restricted = False
      revision = 15
      short_name = Past Cure™
      timestamp = 1648353047000
      top_category = downloadable_game
      url = https://store.playstation.com/store/api/chihiro/00_09_000/container/GB/en/999/EP2595-CUSA07370_00-0001000100010
      001/1648353047
    }

推荐答案

100 contains a string,不是嵌套对象,这就是$link.default_sku.display_price不起作用的原因.

这是string happens to be the stringification of a nested 102,就像您使用字符串内插得到的那样(例如,"$([pscustomobject] @{ foo=1; bar =2 })",或者--在本例中最有可能的是--在使用ConvertTo-Json的JSON文本的creation期间超过默认递归深度2时,这是一个常见且令人遗憾的trap --参见this post.

您有两个 Select :

  • Fix the problem at the source,方法是传递一个足够高到ConvertTo-Json-Depth参数,以防止在创建UKStore.json文件时被截断.

  • 如果这不是一个选项,则必须使用do text parsing来从字符串中提取感兴趣的值.但是请注意,这通常不是robust,因为[pscustomobject]的字符串格式是为人类观察者设计的,而不是为programmatic处理而设计的.值得注意的是,带空格的字符串值两边的引号将丢失:

    # -> '£24.99'
    $link.default_sku -replace '(?s).+\bdisplay_price=([^;]+).+', '$1'
    

Json相关问答推荐

使用Shell深入挖掘到最低的SON元素

如何获取brew list作为JSON输出

kotlinx-serialization:如何将具有不同类型对象的JsonArray转换为同一个Class

在Jenkins中使用ReadJSON读取json子元素

JSON API返回多个数组,需要帮助拼合数据以存储在SQL Server数据库表中

简单条形图和有序分类中条形图的 colored颜色 梯度

Jolt - 如何比较 if else 条件的两个值

jq: Select 何时来自另一个数组的值与此 json 中的值匹配

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

Scala - 在构建 Json 时无法删除 Key -> value "{}" 大括号的双引号

判断golang中解析的json响应中是否存在所需的json键(不是值)

从 JSON 响应中获取最新版本发布字段

从 PowerShell 编辑 Windows 终端配置文件设置 JSON

如果有 1 个元素,如何防止 ConvertFrom-Json 折叠嵌套数组

将 YAML 文件转换为 Python JSON 对象

Android 上的 JSON - 序列化

JSON 语法错误:'unexpected number' 或 'JSON.parse: expected ',' or '}' after property value in object'

json_encode() 返回 false

使用 Retrofit 解析动态密钥 Json 字符串

如何使用 Serde 反序列化带有自定义函数的可选字段?