使用 ConvertFrom-Json 后 Powershell 访问 JSON 中的嵌套对象

2024-02-13

我已经能够在一定程度上成功解析一些 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}

我根本无法,无论我尝试使用什么符号来访问“$link.default_sku”中的属性,我显然没有在我的大脑中连接某些东西,但我觉得:

$link.default_sku.display_price

上面的对象应该给我 3.99 英镑的价值,但我什么也没得到。任何帮助克服这种心理障碍的帮助都会很棒。

格式自定义更上一层楼

$link | Format-Custom

Output:

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
    }

$link.default_sku包含一个string,不是嵌套对象,这就是为什么$link.default_sku.display_price不起作用。

That 字符串恰好是字符串化嵌套的[pscsutomobject],就像您通过字符串插值得到的那样(例如,"$([pscustomobject] @{ foo=1; bar =2 })"或者 - 最有可能在这种情况下 - 当在期间超过默认递归深度 2 时creationJSON 文本使用ConvertTo-Json https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/convertto-json,一个常见且令人遗憾的陷阱 - 请参阅这个帖子 https://stackoverflow.com/q/53583677/45375.

您有两个选择:

  • 从源头解决问题,通过传递一个-Depth论点足够高ConvertTo-Json以防止截断时UKStore.json文件已创建。

  • 如果这不是一个选择,你将不得不do 文本解析从字符串中提取感兴趣的值。但请注意,这通常不是robust,因为字符串化格式[pscustomobject]s 是针对人类观察者的,而不是针对程序化的加工。值得注意的是,带有空格的字符串值周围的引号会丢失:

    # -> '£24.99'
    $link.default_sku -replace '(?s).+\bdisplay_price=([^;]+).+', '$1'
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ConvertFrom-Json 后 Powershell 访问 JSON 中的嵌套对象 的相关文章

  • Elm:如何从 JSON API 解码数据

    我有这个数据使用http jsonapi org http jsonapi org format data type prospect id 1 attributes provider user id 1 provider facebook
  • mysql_query 保留返回时在表中创建的数据类型?

    我在mysql中有一个表 CREATE TABLE user id INT name VARCHAR 250 我查询表 result mysql query SELECT id name FROM user 我收集结果 while row
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • () 和 $() 之间的区别[重复]

    这个问题在这里已经有答案了 有什么区别 Write Host Get Date just paren and Write Host Get Date dollar paren 括号内的内容可以是任何内容 仅举一个简单的示例 两者有什么区别吗
  • 从 Powershell 更新计划任务脚本

    我正在尝试编写一个每天运行一次的 Powershell 脚本 它将执行的众多功能之一是确保脚本本身是最新的 我的问题是 由于我对脚本进行了版本控制 因此我需要更新从脚本中创建的计划任务 我在这里考虑了两种不同的方法 其中我也无法弄清楚 我最
  • 我可以将 JSON 字符串转换为 JsonResult 吗?

    我在数据库中存储了一些存储的 JSON 字符串 我想将其作为 JsonResult 返回给客户端 我知道 Json object 将对象转换为 JsonResult 但如果我已经将结果存储在字符串中怎么办 我可以将其转换为 JsonResu
  • SQL Server:删除除系统数据库之外的所有数据库

    在 PowerShell 中 我使用以下代码删除所有非系统 SQL Server 数据库 invoke sqlcmd ServerInstance sqlInstanceName U sqlUser P sqlPass Query EXEC
  • 如何将 Json 放入 asynctask - Android

    我有一个连接到数据库并返回结果的 json 函数 它会执行此操作大约 15 次或根据数据库中有多少条评论执行此操作 json 函数位于 while 循环内 并重复自身 直到从数据库中获取所有评论或达到 15 条评论 问题是当应用程序加载评论
  • JSON(Gson)反序列化为超类对象然后转换为子类对象的最佳方法是什么

    我目前正在研究在Android上使用Gson for Json 刚刚遇到这个问题 假设我们有如下类 class Command public int id COMMAND ID UNSPECIFIED class CommandSpecif
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • 如何忽略警告错误?

    我有以下 PowerShell 脚本 它获取给定 IP 地址内计算机的 NetBIOS 名称 我正在使用管道将结果转储到文本文件中 问题是 如果 IP 地址不可用 则会打印警告 这是 PowerShell 脚本 function Get C
  • Powershell 数组到带引号的逗号分隔字符串

    我有一个数组 需要输出到逗号分隔的字符串 但我还需要引号 这是我所拥有的 myArray file1 csv file2 csv a myArray join a 输出为 a最终 file1 csv file2 csv 我想要的输出是 fi
  • 将新属性动态添加到 Node 中现有的 JSON 数组中

    我需要添加当前 JSON 中不存在的属性 json 对象如下所示 var jsonObj result OK data 我想在 数据 中添加温度 我可以像下面那样做 jsonObj data push temperature 然后 我想在
  • POST 表单数据为 application/json

    我正在开发一个 API 它接收 application json post 请求 并触发一些流程 我目前的主要问题是发送一个 application json 帖子 其中包含来自输 入表单的数据 我已经尝试过 jQuery ajax 但由于
  • 使用变量作为启动进程的文件路径参数

    我想运行一个 exe 它可能位于多个位置 runpath servicepackfolder SQLServer2008SP1 KB968369 IA64 ENU exe Start Process FilePath runpath arg
  • 如何从 PowerShell 指定应用程序池身份用户和密码

    我在自动化 Web 应用程序设置和使用应用程序池标识适当配置 IIS 方面遇到了很多困难 我在用 PowerShell 编写的 Web 应用程序部署脚本中执行此操作 我的要求是我需要 PowerShell 脚本将应用程序池身份用户设置为特定
  • SQL Server 2008:如何使用 powershell 获取“消息”选项卡(在 Management Studio 中)输出

    我在用invoke sqlcmd管理我的数据库 它工作得很好 我将 Management Studio 中 结果 选项卡的输出保存到日志文件中 当我做一个BACKUP DATABASE 输出是在 消息 选项卡上完成的 我想将其保存在日志文件
  • 从输出中删除空行

    我有这个脚本 for true Write Host Get Date UFormat Y m d H M S ping n 1 10 10 50 203 Select String SimpleMatch Pinging Context
  • 具有相关动态参数的 PowerShell 函数

    我试图定义一个函数 其中动态参数相互依赖 例如 我可能有 1 个参数和两个动态参数 rootPath 驱动器盘符 rootPathItem 第一个文件夹 在驱动器盘符内 rootPathChildItem 第二个文件夹 第一个之内 问题是
  • 如何使用 PowerShell 2 的导出 csv 附加文件?

    filesremoved export csv Path E Code powershell logs filesremoved txt NoTypeInformation 我也尝试过 filesremoved export csv Pat

随机推荐