2011-01-13 22 views
0

Ich habe die folgende Zeichenfolge:Wie kann ich diese Zeichenfolge mit NSString analysieren?

callback({"Outcome":"Success", "Message":null, "Identity":"Request", "Delay":0.002, "Symbol":"AAPL", "CompanyName":"Apple Inc.", "Date":"1\/13\/2011", "Time":"4:02:36 PM", "Open":344.6, "Close":345.93, "PreviousClose":344.42, "High":346.63, "Low":343.86, "Last":345.93, "Change":1.51, "PercentChange":0.438, "Volume":785960}) 

ich meine letzte Zeichenfolge will nicht callback( und die letzten ) am Ende der Zeichenfolge enthält. Wie kann ich diesen NSString ändern?

Antwort

2

Machen Sie eine NSMutableString daraus, genannt string. d.h. NSMutableString *string = [NSMutableString stringWithString:myString];.

Dann tun Sie string = [string substringToIndex:[string length]-1]; und dann string = [string substringFromIndex:9]; oder einige solcher.

Oder erstellen Sie erneut eine NSMutableString Instanz mit Ihrer NSString Instanz und rufen Sie [string replaceOccurrencesOfString:@"callback(" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [string length])]; und [string replaceOccurrencesOfString:@")" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [string length])];. Dies könnte bevorzugt werden.

In beiden Fällen, dann erstellen Sie eine NSString Instanz mit der neuen Zeichenfolge, etwas wie goodString = [NSString stringWithString:string];, wenn Sie eine NSString daraus benötigen.

+0

Das mutiert den ursprünglichen String nicht, selbst wenn Sie einen NSMutableString verwenden. – Chuck

+0

@Chuck: Das stimmt. Die ursprüngliche Saite ist natürlich unverändert. Es ist auch nicht notwendig, irgendetwas zu mutieren. Wir brauchen auch nicht 'NSMutableString's, also ist mein Beitrag übertrieben. Alam scheint jedoch den Eindruck zu haben, dass Sie einen 'NSString' modifizieren können, den Sie nicht können. – SK9

1

Sie können einen NSString (nur einen NSMutableString) nicht ändern, aber Sie können [string substringWithRange:NSMakeRange(9, [string length] - 10)] verwenden. Um einen NSMutableString tatsächlich zu mutieren, müssen Sie zwei deleteCharactersInRange: Aufrufe verwenden, um die Teile zu schneiden, die Sie nicht möchten.

3

NSScanner ist eine gute Passform für diese Art von Sache.

NSString *json = nil; 
NSScanner *scanner = [NSScanner scannerWithString:fullString]; 
[scanner scanUpToString:@"{" intoString:NULL]; // Scan to where the JSON begins 
[scanner scanUpToString:@")" intoString:&json]; 

NSLog(@"json = %@", json); 
+0

Oder scannen Sie bis zum (, dann scannen Sie es in das gleiche schwarze Loch, dann scannen Sie bis zum). In beiden Fällen wird dies jedoch fehlschlagen, wenn der JSON a) enthält (z. B. innerhalb einer Zeichenkette). –

Verwandte Themen