【问题标题】:How to get values from json string with aspJSON.asp? [duplicate]如何使用 aspJSON.asp 从 json 字符串中获取值? [复制]
【发布时间】:2020-10-03 14:02:30
【问题描述】:

我有这个 JSON,无论我尝试什么,我都无法从中获取任何值。我不知道我错过了什么?

这是 json 字符串。

 {
        "groups": [{
            "name": "Credit Card",
            "types": ["mc", "visa", "amex"]
        }],
        "paymentMethods": [{
            "brands": ["mc", "visa", "amex"],
            "details": [{
                "key": "encryptedCardNumber",
                "type": "cardToken"
            }, {
                "key": "encryptedSecurityCode",
                "type": "cardToken"
            }, {
                "key": "encryptedExpiryMonth",
                "type": "cardToken"
            }, {
                "key": "encryptedExpiryYear",
                "type": "cardToken"
            }, {
                "key": "holderName",
                "optional": true,
                "type": "text"
            }],
            "name": "Card",
            "type": "scheme"
        }, {
            "name": "Få först. Betala sen med Klarna.",
            "supportsRecurring": true,
            "type": "klarna"
        }, {
            "name": "Trustly",
            "supportsRecurring": true,
            "type": "trustly"
        }, {
            "name": "Swish",
            "supportsRecurring": true,
            "type": "swish"
        }, {
            "name": "Paysafecard",
            "supportsRecurring": true,
            "type": "paysafecard"
        }, {
            "name": "Dela upp med Klarna.",
            "supportsRecurring": true,
            "type": "klarna_account"
        }, {
            "name": "Pay now with Klarna.",
            "supportsRecurring": true,
            "type": "klarna_paynow"
        }]
    }

然后我尝试获取一个值(“信用卡”)并循环遍历所有 paymetsMethods.details.key 值,然后循环所有最后一个“名称”。

<!--#include file="aspJSON1.17.asp" -->
        jsonstring = CStr(objXmlHttp.ResponseText)
        'response.write "---"&jsonstring &"---"
        Set oJSON = New aspJSON
        oJSON.loadJSON(jsonstring)
        
        groupsname=oJSON.data("groups").item("name")
        response.write groupsname
        
        For Each x In oJSON.data("paymentMethods").item("details")
        paymentMethods=oJSON.data("paymentMethods").item("details").item("key")
        response.write paymentMethods
        NEXT
        
        For Each x In oJSON.data("name")
        thename=oJSON.data.item("name")
        response.write thename
        NEXT

我显然错过了什么,但是什么?

【问题讨论】:

  • 我刚刚发现您的问题是在寻找新创建的标签,并想知道为什么我们需要两个新的 asp 标签,考虑到there are already about 120 of them。是关于 asp.net 的吗?
  • 标签aspjson 的问题是不是太模棱两可了,因为有其他库称为aspJSON 而不是this one,我认为OP 正在使用它。
  • 会发生什么,它什么也没打印,有什么错误...什么?
  • 您需要查看重复的问题,这里的问题是您需要先遍历paymentMethods,然后才能访问每个details 集合。代码需要一个嵌套循环。

标签: json vbscript asp-classic


【解决方案1】:

在解析 JSON 时,如果遇到一个集合(即一个数组),则必须在尝试检索 JSON 结构中更深层次的值之前对其进行迭代。

在这种情况下,要访问 key 属性,您必须遍历两个集合。

  1. paymentMethods
  2. details

所以这个For 循环;

For Each x In oJSON.data("paymentMethods").item("details")
paymentMethods=oJSON.data("paymentMethods").item("details").item("key")
response.write paymentMethods
NEXT

应该看起来更像;

Dim paymentMethod, paymentMethodsItem, details, detailsItem
For Each paymentMethodsItem In oJSON.data("paymentMethods")
    Set paymentMethod = oJSON.data("paymentMethods").item(paymentMethodsItem)
    For Each detailsItem In paymentMethod.data("details")
        Set details = paymentMethod.data("details").item(detailsItem)
        Call Response.Write(details.item("key"))
    Next
Next

#提供的代码未经测试


有用的链接

【讨论】:

  • 这个答案有帮助吗?如果是这样,你会考虑留下一个赞成票,甚至是accepting the answer吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
相关资源
最近更新 更多