奇怪的印刷JSON格式

时间:2016-07-07 12:26:07

标签: json swift

我在从HTTP请求中获取JSON时遇到了问题。 在我的代码下面:

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()
}}

这是我回来的JSON:

{
"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;
        }
    );
};}

为什么我得到这种类型的JSON而不是标准的JSON:

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

如果我使用JSON阅读器在线试用,则会以正确的方式显示...

2 个答案:

答案 0 :(得分:2)

因为您没有打印JSON字符串,所以打印的结果是

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

是AnyObject类型。

如果要将JSON视为文本,请使用以下数据创建一个字符串:

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

答案 1 :(得分:0)

NSJSONSerialization.JSONObjectWithData返回一个对象,其中所有元素都映射为:

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

如果您想使用从URL中检索的内容,您需要将结果数据转换为可以使用Swift操作的某个对象,因此NSJSONSerialization.JSONObjectWithData已经为您完成了。

您可以将带有json的输出用于某种适当的类型,在您的情况下,字典。

了解在print(json)之后添加此代码可以获得的内容。

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