0

我有这样的字符串:

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

4 回答 4

4

尝试使用JSONKit( ref ) 或NSJSONSerialization( ref ),它们会给出一个NSArrayor NSDictionary,具体取决于 JSON 字符串的结构。


更新

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

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

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可能会提供有关正在发生的事情的线索。

于 2013-02-20T15:37:39.053 回答
2
  1. 使用 nsstring 方法dataUsingEncoding获取 nsdata 实例。
  2. 利用NSJSONSerialization

您想要的字符串与您提供的字符串相同。

于 2013-02-20T16:34:09.777 回答
0

仅当源字符串各包含一个 [ 和 ] 时,才...

  1. 使用 componentsSeparatedByString 将源字符串与 [.
  2. 使用 componentsSeparatedByString 将上面的结果 (objectAtIndex:0) 与 ] 分开。
于 2013-02-20T17:38:31.587 回答
0

由于 d 是一个字符串:

要删除 "\" ,您可以这样做:

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

由于方括号在前面和最后,也许你可以这样做:

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

第一步是根据您的情况获取该字符串并将 myString 替换为您的字符串。

于 2013-02-20T16:27:24.167 回答