![](/img/trans.png)
[英]Convert NSString to NSDictionary and NSDictionary to NSString
[英]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
鍵或其他自定義鍵中看到一個字符串,則表示發送數據錯誤
但是如果你有
有了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.