PowerShell调用Shopify API后ConvertTo-Json输出转义异常如何排查
Shopify PowerShell拉取数据返回转义JSON问题排查方案
问题根因
你遇到的不是Shopify数据流本身有问题,返回内容里的大量反斜杠是JSON对象被二次序列化的典型表现。原本已经是JSON格式的字符串被再次传入ConvertTo-Json时,PowerShell会自动对字符串内的双引号、斜杠做转义处理,就会出现你看到的\"、\/这类字符。
排查清单
- 排查
-FollowRelLink返回结构:你使用的-FollowRelLink参数会在返回数据超过1页时,将所有页的响应以数组形式返回。如果之前只有1页数据,返回的是单个PSCustomObject,直接序列化正常;当数据超过1页后,数组中如果混入未被自动反序列化的原始JSON字符串,再次序列化就会产生转义。你可以执行$products | ForEach-Object {$_.GetType().Name}查看每个返回元素的类型,确认是否存在String类型的元素。 - 排查序列化深度配置:你当前使用的
-Depth 5只支持最多5层嵌套的对象序列化,Shopify订单数据的嵌套层级(比如line_items下的属性、customer下的地址等)很容易超过5层,超过深度的对象会被PowerShell直接转为字符串,再次序列化也会产生转义。 - 排查响应Content-Type配置:你代码中传入的
-ContentType是请求头参数,GET请求无需配置该参数。如果Shopify某页响应的Content-Type不是application/json,Invoke-RestMethod不会自动做反序列化,会直接返回原始JSON字符串,后续序列化就会出现转义。你可以替换为Invoke-WebRequest拉取单页数据,查看响应头的Content-Type字段是否符合预期。 - 排查API版本状态:你使用的2021-10版本API已经结束生命周期,可进入Shopify后台「应用和销售渠道」-「开发应用」查看你使用的私钥绑定的API版本是否被强制升级,版本变更会直接改变返回结构。
Shopify返回格式调整的触发条件
并不是只有API版本变更才会调整返回格式,以下场景也会导致返回结构变化:
- 店铺开通新功能(如多币种结算、多点位库存、新结账流程),订单新增字段或嵌套层级变高
- API权限被调整,部分字段返回被限制
- Shopify边缘节点缓存异常,偶发返回格式异常的响应
修复代码示例
$uri = "https://yourshop.myshopify.com/admin/api/2021-10/orders.json?limit=250" $apikey = "" $password = "" $headers = @{"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($apikey+":"+$password))} $responses = Invoke-RestMethod -Uri $uri -FollowRelLink -Method Get -Header $headers -MaximumFollowRelLink 5 # 合并多页订单数据,兼容字符串类型的响应 $allOrders = @() foreach ($page in $responses) { if ($page -is [string]) { $pageObj = $page | ConvertFrom-Json $allOrders += $pageObj.orders } else { $allOrders += $page.orders } } # 提高序列化深度到10,避免层级截断 @{orders = $allOrders} | ConvertTo-Json -Depth 10 | Out-File C:\json\orders_merged.json -Encoding utf8
内容的提问来源于stack exchange,提问作者Chris113
相关产品推荐
相关产品推荐

