ASP Classic For Each 在普通 JSON 行之后迭代行,它们包含来自 json2 库的代码

问题描述

我正在尝试从用于 CDON 的 API 获取有关订单的信息,但是当我尝试遍历产品行时遇到了问题,我无法弄清楚是什么导致了它。

我使用的是 json2.asp,这是我使用的代码

strCallback = getCDOnorder(CDOnorderID)
response.write strCallback & "<br><br>" 'This outputs the Json below for reference
set CDONObj = json.parse(strCallback)
for each orderProduct in CDONObj.OrderDetails.OrderRows
    response.write orderProduct & "<br>"
next

strCallback 包含正确的 json 格式代码输出如下所示(稍微简化以便于概览):

{
    "OrderDetails": {
        "CustomerInfo": {
            "CustomerId": 0,"ShippingAddress": {
                "Name": "Firstname Lastname","StreetAddress": "Streetname,15","ZipCode": "12345","City": "Cityname","Country": "SE"
            }
        },"OrderRows": [{
            "OrderRowId": 1,"FulfillmentStatus": "Invoiced","PaymentStatus": "AwaitingPayment","ProductId": "30761620","ProductName": "Test-Product","ProductType": "Article","Quantity": 1,"PricePerUnit": 3995.0
        }],"TotalVat": 799.0
    }
}

我可以在第一次迭代时使用 orderProduct.Quantity 获取数量,但是 For Each 循环在第一次迭代后不会停止,尽管只有一个产品。如果我尝试在循环中抓取它,它将在循环的第二次迭代中崩溃。如果我运行上面的代码,它将继续运行并创建此输出

[object Object]
function(k) { return this[k]; }
function(k,v) { if(typeof(v) === "unkNown") { try { v = (new VBArray(v)).toArray(); } catch(e) { return; } } this[k] = v; }
function(k) { delete this[k]; }
function() { var d = new ActiveXObject("Scripting.Dictionary"); for(var key in this) { if(this.hasOwnProperty(key)) { d.add(key,this[key]); } } return d.keys(); }

现在,第一个 [object Object] 是正确的,并且包含我们想要查看的产品订单行,但接下来的行我不知道它来自哪里以及为什么它不断迭代它们。这 4 行中的代码来自 json2.asp 文件

我已尝试将 if isObject(orderProduct) then 放入循环中,但它仍会输出这些行。

这里发生了什么,我该如何解决

编辑: 肮脏的修复来规避问题。我设法找到一个 if 语句放在 for each 循环内部。它不会阻止它循环,但会阻止它在尝试获取循环内的 Quantity(和其他值)时崩溃。

for each orderProduct in CDONObj.OrderDetails.OrderRows
    if orderProduct.get("Quantity")<>"" then
        ...
    end if
next

我不会把它作为答案,因为它没有回答关于它为什么会发生的问题,但也许编辑可以帮助处于类似情况的其他人。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)