Как распечатать запрос веб-службы и ответ от dataTaskWithRequest

Может ли кто-нибудь помочь мне распечатать запрос веб-службы и ответ от dataTaskWithRequest в формате json при использовании swift 4.0 и объектива C.

Ссылки попробовал:

Как распечатать NSMutableURLRequest?

Я могу распечатать их, но они не печатаются в правильном формате. Мне нужен формат, чтобы я мог вставить его в почтальон или веб-браузер и протестировать.

Формат запроса, который мне нужен:

например:https://restcountries.eu/rest/v2/name/aruba?fullText=true

Для ответа:

Нужен формат ответа, подобный приведенному выше URL-адресу, который я могу просмотреть в http://jsonviewer.stack.hu .


person Prajnaranjan Das    schedule 26.02.2018    source источник
comment
Используйте почтальона. ты можешь стать проще   -  person McDonal_11    schedule 26.02.2018
comment
Спасибо @McDonal_11 ... Использовать почтальон легко, но мне нужно распечатать их в консоли. Является ли это возможным ?   -  person Prajnaranjan Das    schedule 26.02.2018
comment
Спасибо, Викки. Позвольте мне попробовать ... Я дам вам знать ... Но не могли бы вы отправить меня для цели C   -  person Prajnaranjan Das    schedule 26.02.2018
comment
@PrajnaranjanDas проверь мой ответ, я его отредактировал   -  person Nilomi Shah    schedule 26.02.2018


Ответы (4)


Чтобы получить объекты ответа в строковых и словарных объектах:

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];
}

Чтобы получить красивый печатный формат json из объекта или словаря NSData:

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

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

ИЗМЕНИТЬ

Чтобы распечатать запрос json, попробуйте использовать это:

// for POST/JSON type

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

// for GET type

NSLog(@"Request url : %@", [[request.URL absoluteString] stringByRemovingPercentEncoding]);
person Ami Patel    schedule 26.02.2018
comment
@Prajnaranjan Das, проверьте мое редактирование здесь для запроса на печать. - person Ami Patel; 26.02.2018
comment
Спасибо @Ami Patel ... Но в приведенной выше строке выводятся только параметры ... Я отредактировал свой вопрос ... Мне нужен такой формат запроса, чтобы я мог вставить его в почтальон или веб-браузер и протестировать ... - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas хорошо, поэтому вам нужно распечатать запрос GET. Обновлю для того же, как только найду способ. Но, по крайней мере, вы можете упомянуть о формате ответа, который вам нужен, если он был вам полезен. :) - person Ami Patel; 26.02.2018
comment
Спасибо @Ami... Ваша функция дает такой ответ, например::::::Response: First_Approver_Code = CP0001; Имя_Имя = PDas; FlightDurationWindows = { Продолжительность = 8; }; Он должен распечатать файл json, который я могу скопировать и вставить в jsonviewer и проверить… - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas Хорошо, я нашел кое-что для запроса на печать. Я обновляю ответ, используйте его с сгенерированным URL-адресом запроса. - person Ami Patel; 26.02.2018
comment
Спасибо за ваш ответ.....[[request.URL absoluteString] stringByRemovingPercentEncoding]... Он печатает только URL-адрес запроса.. Он не печатает параметры с этим... Я обновил свой вопрос... Пожалуйста один раз посмотреть.. - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas Вы пробовали то, что я обновил для запроса GET? Попробуйте это сначала, это даст вам запрос в формате, который вы ищете. - person Ami Patel; 26.02.2018
comment
.... Этот запрос на получение печатает только URL-адрес запроса ... Он также должен сочетать httpBody/parameters.. - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas Мой ответ также включает печать тела запроса. Он заслуживает одобрения и принятого ответа, поскольку он помог вам. - person Ami Patel; 26.02.2018
comment
Ралли, спасибо за всю вашу поддержку.. Но я думаю, вы поняли мой вопрос... Поэтому, пожалуйста, попробуйте ответить на него... Я дал вам голос "за"... - person Prajnaranjan Das; 26.02.2018

Свифт 4

Используйте эту функцию для печати вашего запроса. Просто передайте свой запрос этой функции и помните, что ваш запрос должен быть Dictionary.

   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 ""
}

ОБНОВЛЕНО до объективного кода 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);

}
}
person Vikky    schedule 26.02.2018

Вы можете распечатать данные JSON, например,

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")
    }
}
person Kamani Jasmin    schedule 26.02.2018
comment
Спасибо @Kamani Jasmin... Но он не печатается в правильном формате json... Он печатается так: Agent = { Curr_Code = INR; OF_ID = 141; TA_Account_Freezed = 0; TA_CL_Amount = 110010990464157,00; ТА_ИД = 3373; User_ID = 123555; }; - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas Да, потому что это словарь. Но почему вам точно нужно печатать json, в то время как пара ключ-значение такая же и в словаре? - person TheTiger; 26.02.2018
comment
@TheTiger... Я хочу проверить их в средстве просмотра json... которое легче читать... в котором я могу расширять и сворачивать любой массив и словарь с помощью большого json... - person Prajnaranjan Das; 26.02.2018
comment
Средство просмотра Json @PrajnaranjanDas также предоставляет JSON из URL-адреса, почему вам нужно делать это программно? Вы можете использовать расширение Postman для Chrome или http://hurl.it/, чтобы увидеть ответ. - person TheTiger; 26.02.2018
comment
@TheTiger... Да, я это знаю... но я задал здесь тот же вопрос... Как распечатать этот полный URL-адрес запроса???... - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas Вы сами делаете запрос с параметрами? У вас есть URL-адрес и параметры, которые вы можете использовать в браузере... Я не понимаю, зачем вам нужно печатать? - person TheTiger; 26.02.2018
comment
@TheTiger... restcountries.eu/rest/v2/name/aruba?fullText =true... Этот URL-адрес является просто примером.... Мне нужно напечатать мой URL-адрес запроса так же, как это... - person Prajnaranjan Das; 26.02.2018
comment
@PrajnaranjanDas Перейдите к jsonlint, просто вставьте URL-адрес выше и нажмите кнопку ValidateJson. - person TheTiger; 26.02.2018
comment
Хотя это не рекомендуется, но вот как вы можете напечатать... do { print (try String(contentsOf: URL(string: "https://restcountries.eu/rest/v2/name/aruba?fullText=true")!, encoding: String.Encoding.utf8)) } catch {} - person TheTiger; 26.02.2018

Для печати ответа в формате JSON, чтобы вы могли скопировать/вставить его в Postman и проверить.

В задаче C:

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

В Swift 4:

let dataString = String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
print(dataString)
person Prajnaranjan Das    schedule 13.03.2018