如何使用aspJSON.asp从json字符串获取值? 有用链接

问题描述

我有这个json。而且,无论我尝试什么,我都无法从中获得任何价值? 我不知道我在想什么? 这是json字符串。

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

我显然缺少什么,但是呢? 任何帮助真的很感激。谢谢。

解决方法

在解析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

提供的代码未经测试


有用链接