我在从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阅读器在线试用,则会以正确的方式显示...
答案 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"])