如何在两个方括号之间提取字符串Objective C

时间:2013-02-20 15:28:39

标签: iphone ios objective-c

我有这样的字符串:

jsonArray:
{
d = "[{\"Training_Code\":\"1234      \",\"Training_Duration\":\"2hrs      \",\"Training_Startdate\":\"14/02/2013 15:00:00\",\"Training_Enddate\":\"14/02/2013 17:00:00\",\"Trainer_ID\":1,\"Training_Location\":\"B-Wing Training room-4\",\"Comments\":\"C# training\",\"Keyword\":\"C#1234\",\"NumberofDays\":1},{\"Training_Code\":\"4321      \",\"Training_Duration\":\"16        \",\"Training_Startdate\":\"17/02/2013 10:30:00\",\"Training_Enddate\":\"17/02/2013 17:30:00\",\"Trainer_ID\":2,\"Training_Location\":\"A-Wing Training Room-6\",\"Comments\":\"Objective-C\",\"Keyword\":\"Obj-C4321\",\"NumberofDays\":2}]";
}

我想获取两个方括号(包括方括号)之间的数据,然后删除所有“\”以获取我的最终字符串:

[
{
"Training_Code": "1234",
"Training_Duration": "2hrs",
"Training_Startdate": "14/02/201315: 00: 00",
"Training_Enddate": "14/02/201317: 00: 00",
"Trainer_ID": 1,
"Training_Location": "B-WingTrainingroom-4",
"Comments": "C#training",
"Keyword": "C#1234",
"NumberofDays": 1
},
{
"Training_Code": "4321",
"Training_Duration": "16",
"Training_Startdate": "17/02/201310: 30: 00",
"Training_Enddate": "17/02/201317: 30: 00",
"Trainer_ID": 2,
"Training_Location": "A-WingTrainingRoom-6",
"Comments": "Objective-C",
"Keyword": "Obj-C4321",
"NumberofDays": 2
}
]

我怎么能在objective-c中这样做?感谢。

4 个答案:

答案 0 :(得分:4)

尝试使用JSONKitref)或NSJSONSerializationref),他们会提供NSArrayNSDictionary,具体取决于JSON字符串的结构。


<强>更新

d看起来像一个格式良好的JSON字符串,但它来自哪里?它是char[](如上面的文章中所述),NSString还是控制台输出?

从这里看,您的第一个代码清单是打印到控制台的内容。将JSON字符串打印到控制台通常会打印转义字符(\)。在您的其他帖子中,您假设每个响应都可以解析为数组。首先将返回的对象存储到id中,然后检查其类:

会更安全
id rawData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError

if ( jsonParsingError != nil ) {
    // investigate the parsing error
}
else if ( [rawData isKindOfClass[NSDictionary class]] ) {
    NSDictionary *dict = rawData;
    //  process dictionary
}
else if ( [rawData isKindOfClass[NSArray class]] ) {
    NSArray *array = rawData;
    // process array
}
else {
    // some thing went completely wrong
}

您也没有表明您正在检查任何可能的错误。检查jsonParsingError可能会提供有关正在发生的事情的线索。

答案 1 :(得分:2)

  1. 使用nsstring方法dataUsingEncoding获取nsdata实例。
  2. 使用NSJSONSerialization
  3. 您想要的字符串与您提供的字符串相同。

答案 2 :(得分:0)

由于d是一个字符串:

要删除“\”,您可以这样:

NSString *newString = [myString stringByReplacingOccurrencesOfString:@"\" withString:@""];

由于方括号位于前端和末尾,您可以这样做:

[newString removeObjectAtIndex:0];
[newString removeObjectAtIndex:[newString count]-1];

第一步是根据你的情况获取该字符串,并用你的字符串替换myString。

答案 3 :(得分:0)

仅当源字符串包含一个[和],然后......

  1. 使用componentsSeparatedByString将源字符串与[。
  2. 分开
  3. 使用componentsSeparatedByString将上面的结果(objectAtIndex:0)与]分开。
相关问题