¿Alguien puede guiarme sobre cómo imprimir la solicitud y la respuesta del servicio web de dataTaskWithRequest en formato json mientras se usa swift 4.0 y el objetivo C.

Enlaces probados:

¿Cómo imprimir NSMutableURLRequest?

Puedo imprimirlos, pero no se imprime en el formato adecuado. Necesito un formato para poder pegarlo en cartero o navegador web y probar.

Formato de solicitud que necesito:

Por ejemplo: https://restcountries.eu/rest/v2/name/aruba? fullText = true

Para respuesta:

Necesito el formato de respuesta como la respuesta de la url anterior que puedo ver en http://jsonviewer.stack.hu.

-2
Prajnaranjan Das 26 feb. 2018 a las 08:27

4 respuestas

La mejor respuesta

Para imprimir la respuesta en formato JSON, para que pueda copiarla / pegarla en Postman y verificar.

En el objetivo C :

NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString: %@", jsonString);

En Swift 4 :

let dataString = String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
print(dataString)
0
Prajnaranjan Das 13 mar. 2018 a las 06:20

Para obtener objetos de respuesta en cadenas y objetos de diccionario:

NSURLSessionDataTask *task = [session dataTaskWithRequest:URLRequest
                                                completionHandler:
                                      ^(NSData *data, NSURLResponse *response, NSError *error) 
{ 
    // your code 

    NSString *responseString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    id responseObjects = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
}

Para obtener un formato json bastante impreso del objeto o diccionario NSData:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:yourDictionary
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:&error];

NSString *strData = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"Params : %@", strData);

EDITAR

Para imprimir la solicitud json, intente usar esto:

// for POST/JSON type

NSLog(@"Request body %@", [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]);

// for GET type

NSLog(@"Request url : %@", [[request.URL absoluteString] stringByRemovingPercentEncoding]);
2
Ami Patel 26 feb. 2018 a las 07:37

Puede imprimir datos JSON como,

if error == nil {
    do {
        let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments)
        print(json)
        let dic = json as! NSDictionary
        print(dic)
    }
    catch {
        print("Throw error when convert to json")
    }
}
0
rmaddy 26 feb. 2018 a las 05:35

Swift 4

Use esta función para imprimir su solicitud. Simplemente pase su solicitud a esta función y recuerde que su solicitud debe ser Diccionario.

   func prettyPrintRequest(with json: [String : Any]) -> String{
    let data = try! JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
    let string = String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
    if let string  = string{

        return string
    }
    print("something went wrong")
    return ""
}

ACTUALIZADA al código objetivo c

-(void)prettyPrintRequest:(NSDictionary*)request{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:request
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:&error];

if (jsonData) {
     NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"Valid Json String is %@", jsonString);

} else {
    NSLog(@"Error is : %@", error);

}
}
1
Vikky 26 feb. 2018 a las 05:58