【问题标题】:How to create Array of Dictionaries from comma separated strings?如何从逗号分隔的字符串创建字典数组?
【发布时间】:2014-09-30 16:28:59
【问题描述】:

我收到如下逗号分隔的字符串,将其转换为字典数组。我尝试使用[myString componentsSeparatedByString:@","];,但输出完全不同。转换它的正确方法是什么?

  NSString *cancellationStr ==> [{"cutoffTime":"0-2","refundInPercentage":"0"},{"cutoffTime":"2-3","refundInPercentage":"50"},{"cutoffTime":"3-24","refundInPercentage":"90"}]

 NSArray *array = [cancellationStr componentsSeparatedByString:@","]; 

  //Gives response like below

(
"[{\"cutoffTime\":\"0-2\"",
"\"refundInPercentage\":\"0\"}",
"{\"cutoffTime\":\"2-3\"",
"\"refundInPercentage\":\"50\"}",
"{\"cutoffTime\":\"3-24\"",
"\"refundInPercentage\":\"90\"}]"
)

使用单例 HTTP 类获取和解析的代码

   NSString *urlString=[NSString stringWithFormat:@"%@%@sourceCity=%@&destinationCity=%@&doj=%@",BASE_URL,AVAILABLE_BUSES,source,destination,dateStr];
   urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
   NSURL *url= [NSURL URLWithString:urlString];

    SuccessBlock successBlock = ^(NSData *responseData){
    NSError *error;
    jsonDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
     bArray = [jsonDictionary objectForKey:@"apiAvailableBuses"];
      };

     FailureBlock failureBlock = ^(NSError *error){
     NSLog(@"%@",error);
     };


HTTPRequest *request = [[HTTPRequest alloc]initWithURL:url successBlock:successBlock failureBlock:failureBlock];
[request startRequest];  

上面的成功块接收到我要转换的字符串。

    NSString *cancellationStr = [[bArray objectAtIndex:rowIndex]valueForKey:@"cancellationPolicy"];

    bObject.cancellationPolicy = [cancellationStr componentsSeparatedByString:@","];
    NSLog(@"Cancellation Array : %@",bObject.cancellationPolicy);

【问题讨论】:

  • 使用 NSJSONSerialization 解析 JSON。
  • 完成了...这是收到的回复顺便说一句
  • 使用NSJSONSerialization显示您处理myString的代码。
  • 我猜他做了 DataWithObject 而不是 ObjectWithData。
  • 向我们展示您输入 NSJSONSerialization 的 JSON。

标签: ios objective-c nsstring nsarray nsdictionary


【解决方案1】:

所以,“apiAvailableBusses”是一个像这样的元素数组:

{
    "operatorId":196,
    "operatorName":"Sahara Bus",
    "departureTime":"6:45 PM",
    "mTicketAllowed":false,
    "idProofRequired":false,
    "serviceId":"1602",
    "fare":"450",
    "busType":"Sahara Hitech Non A/c",
    "routeScheduleId":"1602",
    "availableSeats":29,
    "partialCancellationAllowed":false,
    "arrivalTime":"07:30 AM",
    "cancellationPolicy":"[{\"cutoffTime\":\"12\",\"refundInPercentage\":\"0\"},{\"cutoffTime\":\"24\",\"refundInPercentage\":\"50\"}]",
    "commPCT":0.0,
    "boardingPoints":[
        {
            "time":"09:05PM",
            "location":"Ameerpet,Kaveri Kmakshi Travels,Beside RKS Mall,Ameerpet, Mr.Aman-9391830030.",
            "id":"6"
        },
        {
            "time":"09:15PM",
            "location":"Punjagutta,Sai Ganesh Travels, Punjagutta, Mr.Aman-9391830030.",
            "id":"2241"
        },
        {
            "time":"09:30PM",
            "location":"Lakdi-ka-pool,Sahara Travels,Hotel Sri Krishna Complex,Mr.Aman-9391830030.",
            "id":"2242"
        },
        {
            "time":"08:45PM",
            "location":"ESI,Behind Bajaj Show Room, Near Nani Travels. Mr.Aman-9391830030.",
            "id":"2287"
        },
        {
            "time":"09:45PM",
            "location":"Nampally,Near Khaja Travels, Nampally,Mr.Aman-9391830030.",
            "id":"2321"
        },
        {
            "time":"09:16PM",
            "location":"Paradise,Near SVR Travels, Paradise,Mr.Aman-9391830030.",
            "id":"2322"
        },
        {
            "time":"10:00PM",
            "location":"Afzalgunj,Sahar Travels,Mr.Aman-9391830030.",
            "id":"2323"
        },
        {
            "time":"09:00PM",
            "location":"Secunderbad Station,Near Asian Travels.Mr.Aman-9391830030.",
            "id":"2336"
        }
    ],
    "droppingPoints":null,
    "inventoryType":0
}

“cancellationPolicy”元素是一个字符串,即所谓的“嵌入式 JSON”。 (为什么他们在这种情况下这样做,我不知道。)这意味着字符串必须通过 NSJSONSerialization 再次提供。并且要将 NSString 转换为 NSData(再次通过 NSJSONSerialization 提供),您需要首先使用dataWithEncoding:NSUTF8StringEncoding

【讨论】:

  • 好吧thanx。会试试的
猜你喜欢
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2010-10-28
  • 1970-01-01
相关资源
最近更新 更多