Ro Ca
Ro Ca

Reputation: 11

Strange printed JSON format

I've got a problem getting back a JSON from an HTTP request. Below my code:

class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()

let baseURL = "url/code.php"

func getParcheggi() {
    let request = NSMutableURLRequest(URL: NSURL(string: link1)!)
    request.HTTPMethod = "POST"
    let postString = ""//id=13&name=Jack
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
        guard error == nil && data != nil else {
            print("error=\(error)")
            return
        }

        if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
        }

        do{
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
            print(json)  //*** HERE I PRINT THE JSON ***
        }catch{

        }  
    }
    task.resume()
}}

This is the JSON i'm getting back:

{
"qk_response_sa" =     {
    ErroreResult =         {
        Codice = 0;
        Messaggio = ok;
    };
    Siti =         (
                    {
            Descrizione = "Quick Morelli";
            IDSito = 1;
            Indirizzo = "Via Morelli 64";
            Localita = Napoli;
            MaxAbb = 5;
            MaxPre = 5;
            Provincia = Na;
        },
                    {
            Descrizione = "Quick Linate ";
            IDSito = 2;
            Indirizzo = "Viale Corsica angolo via Terenzio 6";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 300;
            Provincia = MI;
        },
                    {
            Descrizione = "Quick Stazione Centrale ";
            IDSito = 4;
            Indirizzo = "Piazza Nazionale snc";
            Localita = Napoli;
            MaxAbb = 0;
            MaxPre = 150;
            Provincia = Na;
        },
                    {
            Descrizione = "Quick Buenos Aires ";
            IDSito = 5;
            Indirizzo = "Corso Buenos Aires,21";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 50;
            Provincia = MI;
        },
                    {
            Descrizione = "Quick Lodi ";
            IDSito = 6;
            Indirizzo = "Via Giovanni Balilla Magistri ";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 150;
            Provincia = MI;
        },
                    {
            Descrizione = "Quick Sempione ";
            IDSito = 7;
            Indirizzo = "Via Corleone,7 ";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 150;
            Provincia = MI;
        },
                    {
            Descrizione = "Quick Palmanova";
            IDSito = 8;
            Indirizzo = "Via Benadir, 1";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 150;
            Provincia = MI;
        },
                    {
            Descrizione = "Quick Porta Capuana";
            IDSito = 9;
            Indirizzo = "Piazza San Francesco";
            Localita = Napoli;
            MaxAbb = 0;
            MaxPre = 80;
            Provincia = Na;
        },
                    {
            Descrizione = "Quick San Paolo";
            IDSito = 11;
            Indirizzo = "Via Cinthia";
            Localita = Napoli;
            MaxAbb = 0;
            MaxPre = 0;
            Provincia = Na;
        },
                    {
            Descrizione = "Quick Porta di Massa";
            IDSito = 12;
            Indirizzo = "Vico degli scoppettieri 47";
            Localita = Napoli;
            MaxAbb = 0;
            MaxPre = 0;
            Provincia = NA;
        },
                    {
            Descrizione = "Quick Policlinico";
            IDSito = 13;
            Indirizzo = "Via Zaccherini Alvisi 12";
            Localita = Bologna;
            MaxAbb = 0;
            MaxPre = 100;
            Provincia = Bo;
        },
                    {
            Descrizione = "Quick Washington";
            IDSito = 14;
            Indirizzo = "Via Digione, 5";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 100;
            Provincia = Mi;
        },
                    {
            Descrizione = "Quick Mondadori";
            IDSito = 15;
            Indirizzo = "Largo di Porta Pradella";
            Localita = Mantova;
            MaxAbb = 0;
            MaxPre = 100;
            Provincia = Mn;
        },
                    {
            Descrizione = "Quick Mercato";
            IDSito = 16;
            Indirizzo = "Piazza Matteotti";
            Localita = Caserta;
            MaxAbb = 0;
            MaxPre = 100;
            Provincia = Ce;
        },
                    {
            Descrizione = "Quick Garage Centrale";
            IDSito = 17;
            Indirizzo = "Via dei Fossi 507r";
            Localita = Firenze;
            MaxAbb = 0;
            MaxPre = 50;
            Provincia = Fi;
        },
                    {
            Descrizione = "Quick Aeroporto Palermo ";
            IDSito = 19;
            Indirizzo = "Aeroporto Falcone e Borsellino  - Cinisi ";
            Localita = "Palermo ";
            MaxAbb = 0;
            MaxPre = 180;
            Provincia = Pa;
        },
                    {
            Descrizione = "Quick  Aeroporto Brindisi";
            IDSito = 20;
            Indirizzo = "Contrada Baroncino, 11/A";
            Localita = Brindisi;
            MaxAbb = 0;
            MaxPre = 70;
            Provincia = BR;
        },
                    {
            Descrizione = "Quick Mostra Via Terracina ";
            IDSito = 22;
            Indirizzo = "Via Terracina, 197 ";
            Localita = "Napoli ";
            MaxAbb = 0;
            MaxPre = 300;
            Provincia = Na;
        },
                    {
            Descrizione = "Quick San Francesco Bari ";
            IDSito = 23;
            Indirizzo = "Via trevisani,54 A ";
            Localita = "Bari ";
            MaxAbb = 0;
            MaxPre = 150;
            Provincia = Ba;
        },
                    {
            Descrizione = "Quick Mostra Viale Kennedy ";
            IDSito = 24;
            Indirizzo = "Viale Kennedy, 54 ";
            Localita = "Napoli ";
            MaxAbb = 0;
            MaxPre = 50;
            Provincia = NA;
        },
                    {
            Descrizione = "Quick Ospedale Mazzoni -Ascoli Piceno ";
            IDSito = 25;
            Indirizzo = "Via Salaria Inferiore ";
            Localita = "Ascoli Piceno ";
            MaxAbb = 0;
            MaxPre = 60;
            Provincia = AP;
        },
                    {
            Descrizione = "Quick Centro Happio - Roma ";
            IDSito = 26;
            Indirizzo = "Via Cesare Baronio 21-23";
            Localita = "Roma ";
            MaxAbb = 0;
            MaxPre = 100;
            Provincia = RM;
        },
                    {
            Descrizione = "Quick Bonola - Milano ";
            IDSito = 27;
            Indirizzo = "Via Quarenghi n\U00b0 23  ";
            Localita = "Milano ";
            MaxAbb = 0;
            MaxPre = 150;
            Provincia = MI;
        },
                    {
            Descrizione = "Quick Aeroporto Verona Sky Parking ";
            IDSito = 28;
            Indirizzo = "Via Monte Baldo, 14 - Dossobuono di Villafranca ";
            Localita = "Verona ";
            MaxAbb = 0;
            MaxPre = 100;
            Provincia = VR;
        },
                    {
            Descrizione = "Quick Yes Parking  Aeroporto Milano Malpensa";
            IDSito = 29;
            Indirizzo = "Via Giusti n\U00b0101 - Somma Lombardo (VA)";
            Localita = "Milano ";
            MaxAbb = 0;
            MaxPre = 600;
            Provincia = MI;
        },
                    {
            Descrizione = "Sede Napoli";
            IDSito = 30;
            Indirizzo = "Via ";
            Localita = Napoli;
            MaxAbb = 0;
            MaxPre = 0;
            Provincia = NA;
        },
                    {
            Descrizione = "Sede Milano";
            IDSito = 31;
            Indirizzo = "";
            Localita = Milano;
            MaxAbb = 0;
            MaxPre = 0;
            Provincia = MI;
        }
    );
};}

Why I got this type of JSON instead of a standard one:

{"employees":[{"firstName":"John", "lastName":"Doe"},{"firstName":"Anna", "lastName":"Smith"},{"firstName":"Peter", "lastName"enter code here:"Jones"}]}

If I try online with a JSON reader it is shown in the correct way...

Upvotes: 1

Views: 106

Answers (2)

OOPer
OOPer

Reputation: 47896

NSJSONSerialization.JSONObjectWithData returns an object with all elements mapped as:

JSON Array   -> NSArray
JSON Object  -> NSDictionary
JSON Number  -> NSNumber (containing number)
JSON String  -> NSString
JSON Boolean -> NSNumber (containing boolean)
JSON Null    -> NSNull

If you want to use the content retrieved from the URL, you need to convert the result data into some object which you can manipulate with Swift, so NSJSONSerialization.JSONObjectWithData have just done it for you.

You can use the output with casting json to some appropriate type, in your case, dictionary.

See what you can get with this code added after your print(json).

    let jsonDict = json as! [String: AnyObject]
    print(jsonDict["qk_response_sa"])

Upvotes: 0

Eric Aya
Eric Aya

Reputation: 70115

Because you are not printing the JSON String, you are printing the result of

try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

which is of AnyObject type.

If you want to see your JSON as text, make a String with the data:

if let stringJSON = String(data: data!, encoding: NSUTF8StringEncoding) {
    print(stringJSON)
}

Upvotes: 2

Related Questions