简体   繁体   中英

Parsing JSON returns nil

I'm using this code to order a product place in the cart. I'm trying to get the order ID of the order generated. I'm not too sure what is happening as the 'result' is the AnyHashable value and ID is the value I need. When the code is ran, it always prints nil?

Moltin.sharedInstance().cart.order(withParameters: orderParameters, success: { (responceDictionary) -> Void in
    print(responceDictionary)

    let orderID1 = responceDictionary!["result.id"] as? String
    let orderID = orderID1

    print(orderID)

I'm trying to parse this data:

Optional([AnyHashable("status"): 1, AnyHashable("result"): {
"bill_to" =     {
    data =         {
        "address_1" = "123 Sunny Street";
        "address_2" = Sunnycreek;
        city = Sunnyvale;
        company = "";
        country =             {
            data =                 {
                code = US;
                name = "United States";
            };
            value = "United States";
        };
        county = California;
        "created_at" = "2017-04-22 19:34:48";
        customer =             {
            data =                 {
                "created_at" = "2017-04-22 19:34:48";
                email = "jon.doe@gmail.com";
                "first_name" = Jon;
                group = "<null>";
                id = 1498789797559271902;
                "last_name" = Doe;
                order = "<null>";
                password = "<null>";
                "updated_at" = "2017-04-22 19:34:48";
            };
            value = Jon;
        };
        "first_name" = Jon;
        id = 1498789800293958111;
        instructions = "";
        "last_name" = Doe;
        order = "<null>";
        phone = 6507123124;
        postcode = CA94040;
        "save_as" = "";
        "updated_at" = "2017-04-22 19:34:48";
    };
    value = "";
};
"created_at" = "2017-05-05 11:11:38";
currency =     {
    data =         {
        code = GBP;
        "created_at" = "<null>";
        "decimal_point" = ".";
        default = 1;
        enabled = 1;
        "exchange_rate" = 0;
        format = "\U00a3{price}";
        id = 1490649105943233368;
        modifier = "+0";
        rounding = "<null>";
        "thousand_point" = ",";
        title = "British Pound";
        "updated_at" = "<null>";
    };
    value = "British Pound";
};
customer =     {
    data =         {
        "created_at" = "2017-04-22 19:34:48";
        email = "jon.doe@gmail.com";
        "first_name" = Jon;
        group = "<null>";
        id = 1498789797559271902;
        "last_name" = Doe;
        order = "<null>";
        password = "<null>";
        "updated_at" = "2017-04-22 19:34:48";
    };
    value = Jon;
};
gateway =     {
    data =         {
        description = "<null>";
        enabled = 1;
        name = Dummy;
        slug = dummy;
    };
    value = Dummy;
};
id = 1507958626625520537;
order = "<null>";
"ship_to" =     {
    data =         {
        "address_1" = "123 Sunny Street";
        "address_2" = Sunnycreek;
        city = Sunnyvale;
        company = "";
        country =             {
            data =                 {
                code = US;
                name = "United States";
            };
            value = "United States";
        };
        county = California;
        "created_at" = "2017-04-22 19:34:48";
        customer =             {
            data =                 {
                "created_at" = "2017-04-22 19:34:48";
                email = "jon.doe@gmail.com";
                "first_name" = Jon;
                group = "<null>";
                id = 1498789797559271902;
                "last_name" = Doe;
                order = "<null>";
                password = "<null>";
                "updated_at" = "2017-04-22 19:34:48";
            };
            value = Jon;
        };
        "first_name" = Jon;
        id = 1498789800293958111;
        instructions = "";
        "last_name" = Doe;
        order = "<null>";
        phone = 6507123124;
        postcode = CA94040;
        "save_as" = "";
        "updated_at" = "2017-04-22 19:34:48";
    };
    value = "";
};
shipping =     {
    data =         {
        company = "Royal Mail";
        "created_at" = "2017-04-20 16:14:00";
        description = "";
        id = 1497239180449678231;
        order = "<null>";
        price =             {
            data =                 {
                formatted =                     {
                    tax = "\U00a30.80";
                    "with_tax" = "\U00a34.79";
                    "without_tax" = "\U00a33.99";
                };
                raw =                     {
                    tax = "0.798";
                    "with_tax" = "4.788";
                    "without_tax" = "3.99";
                };
                rounded =                     {
                    tax = "0.8";
                    "with_tax" = "4.79";
                    "without_tax" = "3.99";
                };
            };
            value = "\U00a34.79";
        };
        "price_max" = 0;
        "price_min" = 0;
        slug = "free-shipping";
        status =             {
            data =                 {
                key = 1;
                value = Live;
            };
            value = Live;
        };
        "tax_band" =             {
            data =                 {
                "created_at" = "<null>";
                description = "<null>";
                id = 1490649106035507967;
                rate = 20;
                title = Default;
                "updated_at" = "<null>";
            };
            value = Default;
        };
        title = "Standard Shipping";
        "updated_at" = "2017-04-20 16:14:21";
        "weight_max" = 0;
        "weight_min" = 0;
    };
    value = "Standard Shipping";
};
status =     {
    data =         {
        key = unpaid;
        value = Unpaid;
    };
    value = Unpaid;
};
totals =     {
    "shipping_price" =         {
        formatted = "\U00a34.79";
        raw = "4.788";
        rounded = "4.79";
    };
    subtotal =         {
        formatted = "\U00a32,900.00";
        raw = 2900;
        rounded = 2900;
    };
    tax =         {
        formatted = "\U00a3580.00";
        raw = 580;
        rounded = 580;
    };
    total =         {
        formatted = "\U00a33,484.79";
        raw = "3484.79";
        rounded = "3484.79";
    };
};
"updated_at" = "2017-05-05 11:11:38";

You cannot pass a key path to a key subscription and id is an Int:

if let resultDictionary = responceDictionary["result"] as? [String:Any],
   let orderID = resultDictionary["id"] as? Int {
       let orderIDString = "\(orderID)"
       print(orderIDString)
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM