2017-05-17 3 views
0

Ich bin neu in JSON und Objective-C-Sprache von Apple. Ich habe nur versucht, einige Übung und SachenParsing arabischer Text mit JSON-Ausgabe

mit yandex.ru übersetzen api

Ich habe versucht, diese URL

https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20170517T154730Z.927d87b76de60242.7a92e4612778a4838d40ab192df5297d2a1af4ed&text=Hello&lang=ar

zu tun, die (HALLO) von Englisch übersetzt in arabisch .. immer noch gut

auf meinem Projekt in Xcode habe ich diesen Code versucht, thi zu machen NGS arbeitet

NSString *jsonString = [NSString stringWithFormat:@"https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20170517T154730Z.927d87b76de60242.7a92e4612778a4838d40ab192df5297d2a1af4ed&text=Hello&lang=ar"]; 
jsonString = [jsonString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 
NSURL *url=[NSURL URLWithString:jsonString]; 
NSData *data=[NSData dataWithContentsOfURL:url]; 
NSError *error=nil; 
//NSLog(@"%@",dictionary); 

NSArray* dictionary = [NSJSONSerialization JSONObjectWithData:data 
              options:kNilOptions 
               error:&error]; 


NSLog(@"Your JSON Object: %@ Or Error is: %@", [dictionary valueForKey:@"text"], error); 
NSString*string = [NSString stringWithFormat:@"%@",[dictionary valueForKey:@"text"]]; 

bis hier seine feinen .. aber es gibt einen falschen Wert auf dem Log statt (مرحبا) sein

Ihr JSON-Objekt: ( „\ U0645 \ U0631 \ U062d \ U0628 \ U0627 " )

Antwort

2

Der Wert ist korrekt. Es ist das Objekt - ein Array - in Verbindung mit NSLog, das diesen Ausgang erzeugt, der Unicode-Tokens anzeigt.

Zunächst ist das JSON-Objekt ein Wörterbuch und kein Array, der Objective-C-Compiler ist so höflich, sich in diesem Moment nicht zu beschweren.

NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data ... 

Zweitens nie valueForKey verwenden, um ein einzelnes Objekt aus einem Wörterbuch zu erhalten, verwenden Sie Schlüssel Abonnement

NSLog(@"Your JSON Object: %@ Or Error is: %@", dictionary[@"text"], error); 

jedoch der Wert für Schlüssel text ein Array ist. Um die Ergebniszeichenfolge zu erhalten, rufen Sie das erste Element im Array ab und Sie sollten prüfen, ob kein Fehler vorliegt und ob das Array nicht leer ist, um einen Absturz außerhalb des Bereichs zu vermeiden.

Nun, wenn Sie ordnen die string auf einem Etikett oder Textansicht finden Sie die مرحبا erwartet bekommen.


PS: Zwei weitere Verbesserungen des Codes:

  • Sie nicht stringWithFormat brauchen, wenn es keine Argumente Format

    sind
    NSString *jsonString = @"https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20170517T154730Z.927d87b76de60242.7a92e4612778a4838d40ab192df5297d2a1af4ed&text=Hello&lang=ar"; 
    
  • Um ungültige Zeichen NSURLComponents verwenden zu entkommen die ist in der Lage, das auf intelligente Weise zu tun:

    NSURLComponents *components = [NSURLComponents componentsWithString:jsonString]; 
    NSURL *url = components.URL;