簡體   English   中英

如何將NSString轉換為NSDictionary?

[英]how to convert NSString into NSDictionary?

嗨,我是iOS的新手,所以請幫助我..

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {

        NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"];
        NSLog(@"%@",userInfo);
        NSString * string=[[NSString alloc]initWithFormat:@"%@",[segueDictionary valueForKey:@"vendor_data"]];}

輸出是

{
    aps =     {
        alert = "Get Upto 50% Off ";
        sound = default;
        "vendor_data" =         {
            cat = "Baby & kids";
            "closing_hours" = "09:00 PM";
            latitude = "28.57089323";
            longitude = "77.32666539";
            "offer_desc" = "Get Upto 50% Off On All Kids Clothing.";
            "offer_id" = 1128;

            "offer_in_percentage" = "Get Upto 50% Off ";
            "offer_item_name" = Lilliput;
            "offer_valid_upto" = "2015-10-30";
            "opening_hours" = "10:00 AM";
            "phone_no" = "*********";
            pincode = 0;
            rating = 0;
            "sub_category" = "Clothing,Footwear";
            title = "Offer Of The Day";
            "vendor_address" = "***********";
            "vendor_id" = "lliputkids.com";
            "vendor_location" = "*****";
            "vendor_name" = Lilliput;
            "vendor_type" = shop;
        };
    };
}

這來自推送通知數據

NSString * string = {
cat = "Baby & kids";
"closing_hours" = "09:00 PM";
latitude = "28.57089323";
longitude = "77.32666539";
"offer_desc" = "Get Upto 50% Off On All Kids Clothing.";
"offer_id" = 1128;
"offer_in_percentage" = "Get Upto 50% Off ";
"offer_item_name" = Lilliput;
"offer_valid_upto" = "2015-10-30";
"opening_hours" = "10:00 AM";
"phone_no" = "********";
pincode = 0;
rating = 0;
"sub_category" = "Clothing,Footwear";
title = "Offer Of The Day";
"vendor_address" = "shop.no- 6, sun market";
"vendor_id" = "illiputkids.com";
"vendor_location" = "*******";
"vendor_name" = Lilliput;
"vendor_type" = shop;}

此數據為字符串格式,但我想以字典格式獲取字符串格式的數據。 所以請幫我謝謝

我相信您會誤解JSON格式。

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

現在,如果您遵循NSLog語句

NSLog(@"%@",[json objectForKey:@"sub_category"]);

它會給你:-服裝,鞋類

userInfo的參數didReceivePushNotification返回NSDictionary對象。

您可以直接通過以下方式獲取vendor_data字典:

NSDictionary *vendorDataDictionary = [[userInfo objectForKey:@"aps"] objectForKey:@"vendor_data"];

或帶下標

NSDictionary *vendorDataDictionary = userInfo[@"aps"][@"vendor_data"];

valueForKey:方法是一種特殊的KVC方法。 獲取鍵對象的標准方法是objectForKey:

請檢查一下。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{

    NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"];
    NSLog(@"%@",userInfo);
    NSDictionary *vendorDic = [segueDictionary valueForKey:@"vendor_data"];
    NSString *vedorAddress = [vendorDic valueForKey:@"vendor_address"];
}

注意:在{key:value,key:value}中是字典formate。但是value本身可能是字典。 即{key:{key:value},key:{key:value,key:value}}

發送遠程通知時,其有效負載采用JSON格式。 粗略地解釋,這只是將所有對象組合在字典和數組中,因此您可以在有效負載中擁有清晰的對象層次結構。

您現在要做的只是將JSON放入字符串中,而不是擁有單獨的對象(包含對象的數組和字典),而是擁有一個包含所有對象的長字符串。

您需要執行以下操作

  • 確保在通知有效負載中發送有效格式的JSON。 我不知道您是如何發送的,因此我無法真正為您提供幫助。

  • 收到推送后,您將擁有一個userInfo字典,可以使用:objectForKey進行導航。 這是您的JSON,已經轉換為Objective-C對象。

您應該在字典中看到完整的結構。 具有適當層次結構的對象和鍵。

如果您在aps鍵或其他自定義鍵中看到一個字符串,則表示發送數據錯誤

但是如果你有

  • APS
    • 警報
    • 信息
    • 聲音
  • YourCustomKey
    • 自定義對象
      • 另一個自定義子對象
    • 等等

有了userInfo中的這種結構,這意味着您可以使用。 很容易在通知處理的第一行上找到一個斷點,並查看userInfo

然后,只需查看其中的內容並手動獲取即可,但是,如果您自己創建了通知有效負載(您可能已經做了),那么您應該知道哪個數組/字典包含哪些對象,然后手動獲取它。

//I'm just giving EXAMPLES : 
NSDictionary *corePayload = [userInfo objectForKey:@"aps"];
NSDictinoary *firstLevel = [userInfo objectForKey:@"vendor_data"];
float latitude = [[firstLevel objectForKey:@"latitude"]floatValue];

這樣您就可以獲取任何東西。

請注意,從您顯示的內容來看,您的內容格式不正確,有些鍵帶有“”,有些則沒有,這是不正常的。 因此,我建議您去看看您要發送的內容,並仔細按照我的所有步驟進行操作。 如果您的第一步不正確,請不要進行下一步;)

希望您能找到想要的東西!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM