【问题标题】:Create CSV output from Single-Element JSON Array Object Using PowerShell使用 PowerShell 从单元素 JSON 数组对象创建 CSV 输出
【发布时间】:2021-04-12 17:21:58
【问题描述】:

寻求帮助。

我是 powershell 的新手,希望调用具有 JSON 输出(封装在单个数组中)的 API。

预期输出(无法显示 excel 中的所有列):

以下是 API 的响应:

{
    "data": [
        {
            "Records": "[
                          {
                           'RecordId':'A8E00212-BE7B-4AA8-A87B-121E7018EAE0',
                           'RecordNumber':'1999',
                           'FormName':'Costco Boneless Center Cut Loin (Strap On, Strap Off, Super Trim, Premium)',
                           'FormVersion':'22',
                           'FormType':'Check',
                           'LocationName':'Beardstown (85B)',
                           'ResourceName':'Loins-Costco Boneless CC Loin',
                           'SubmittedUserName':'Maria Nava-Garcia',
                           'SubmittedDate':'2020-11-14T16:54:35.920',
                           'SubmittedDateLocal':'2020-11-14T16:54:35.920',
                           'SubmittedTimeZone':'America/Chicago',
                           'ProcessedDate':'2020-11-14T17:41:23.873',
                           'ModifiedDate':'2020-11-14T16:54:35.920',
                           'FieldGroups': [
                                            { 
                                             'FieldGroupName':'' ,
                                             'Fields': [
                                                        {'Date':'11/14/2020'},
                                                        {'Shift':'1'},
                                                        {'Product Code':'55620'},
                                                        {'Number of Pieces Audited':'8'},
                                                        {'Incorrect Bagging Orientation, S-Shaped Bags':'0'},
                                                        {'Incorrect Pieces in Bag':'0'},
                                                        {'Incorrect Boxing Placement':'0'},
                                                        {'Bag Tails':'0'},
                                                        {'Dating Over Bag Print':'0'},
                                                        {'Bones/Cartilage':'1'},
                                                        {'Number of Leakers':'0'},
                                                        {'Foreign Material/Contamination':'0'},
                                                        {'PSE':'0'},
                                                        {'Incorrect Code Dating and Est. #':'0'},
                                                        {'Blood Splash':'0'},
                                                        {'Dark Bruise':'0'},
                                                        {'Scores':'0'},
                                                        {'Sirloin End Not Square':'0'},
                                                        {'Pin Bone Removal':'0'},
                                                        {'Shoulder End Eye Diameter':'0'},
                                                        {'Gouges':'0'},
                                                        {'Fat':'2'},
                                                        {'Remaining Strap (Strap Off Codes Only)':'0'},
                                                        {'Belly Strap (Strap On Codes Only)':'0'},
                                                        {'Ham Patch Present':'0'},
                                                        {'False Lean Present':'1'},
                                                        {'Tag Ends':'0'},
                                                        {'Packaging Defects Total':'0'},
                                                        {'% Packaging Defects':'0'},
                                                        {'Critical Defects Total':'1'},
                                                        {'% Critical Defects':'12.5'},
                                                        {'Other Defects Total':'3'},
                                                        {'% Other Defects':'37.5'},
                                                        {'Total Defects':'4'},
                                                        {'Audit Acceptable':'No'},
                                                        {'What Did You Do?':'Tagged'},
                                                        {'How Many Boxes?':'15'},
                                                        {'Comments':'Notified Dave Long Hector Rodriguez and Jeff Harris'},]},]}
                        ]"
        }
    ]
}

这是我到目前为止编写的代码,

Invoke-WebRequest -Uri 'https://abcd.com/api' | ConvertFrom-Json | Select-Object -ExpandProperty data |ConvertTo-Csv -NoTypeInformation | Set-Content C:\OUTPUT\OUTPUT.csv

excel 文件中的输出是单行记录。

如何将其拆分为 excel 文件中的所有列。

感谢大家的帮助!!

【问题讨论】:

  • 请编辑问题以显示预期输出以及实际输出(或任何错误)是什么。另外请格式化所有代码,选择它,然后按文本输入框上方的“代码”按钮。
  • ForEach-Object { $_.data.Records }替换Select-Object -ExpandProperty data
  • @MathiasR.Jessen ,我尝试替换它并输出我得到的 Length 和 1682 在 2 个单独的行中)。
  • @zett42 - 完成,任何输入?
  • Records value 看起来像一个包含另一个 JSON 的字符串,这很奇怪。这只是一个复制粘贴错误还是应该是这样的?

标签: json powershell api powershell-3.0 powershell-4.0


【解决方案1】:

由于Records 字段是另一个嵌入在字符串值中的 JSON,因此您必须解析两次 JSON:

$response = Invoke-WebRequest -Uri 'https://abcd.com/api'

# Parse outer JSON
$json = $response | ConvertFrom-Json 

# Parse embedded JSON
$recJson = $json.data.records | ConvertFrom-Json

这只是为了让您入门。由于嵌套的FieldGroups 数组,您不能直接将$recJson 转换为CSV。您必须单独处理它。如果您对此有具体问题,最好将其作为一个新问题提出。

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2014-02-20
    • 2021-12-10
    相关资源
    最近更新 更多