2013-02-20 33 views
0

之間extarct字符串我的字符串是這樣的:如何將兩個括號目標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中做到這一點?謝謝。

+1

究竟是第一個代碼清單?我假設'd'是'const char *',否則'jsonArray {...}'部分也是JSON字符串的一部分,並且您省略了封閉的「」。 – 2013-02-20 16:24:34

+0

你的第一個代碼列出了什麼打印到控制檯? – 2013-02-20 16:41:18

回答

4

嘗試使用JSONKitref)或NSJSONSerializationref)時,它們將給予任一種NSArrayNSDictionary,取決於JSON字符串的結構。


UPDATE

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可能會提供有關正在發生的事情的線索。

+0

我正在使用NSJSONSerialization.Please看看我的另一篇文章:http://stackoverflow.com/questions/14961239/posting-http-json-request-using-nsjsonserializer-ios;我不明白爲什麼我會收到錯誤的數據。我只是想讓這個正確的...如果你可以請求幫助。 – bapi 2013-02-20 15:54:31

+0

@bapirout看着你的另一篇文章,但你永遠不會顯示任何超過解析操作的東西。另外,如果你可以將所有相關信息帶入這個問題。 – 2013-02-20 17:04:53

0

由於d是一個字符串:

要刪除「\」,你可以這樣:

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

由於方括號是在前面和結束,也許你可以這樣做:

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

第一步是根據您的情況獲取該字符串並將myString替換爲您的字符串。

+0

這不會編譯。第一個'\'充當轉義字符,所以第一個字符串不會被終止,第二個參數被讀作字符串的一部分。你可以在代碼着色中看到它。 @「\\」可能會工作,具體取決於他的字符串中究竟是什麼 - 無論這些斜槓是真正的字符還是轉義 – 2013-02-20 16:31:38

+0

使用RegularExpression來查找方括號之間的數據。 – 2013-02-20 16:39:29

+0

這將是RegEx'\ [(。*?)\]'' – 2013-02-20 16:50:40

2
  1. 使用nsstring方法dataUsingEncoding來獲取nsdata實例。
  2. 使用NSJSONSerialization

爲你提供你想要的字符串是相同的。

0

只有當源字符串包含一個[和]每一個,然後...

  1. 使用componentsSeparatedByString分裂與[源字符串。
  2. 使用componentsSeparatedByString將上面的結果(objectAtIndex:0)拆分爲]。