Pertanyaan Bagaimana cara mengurai JSON yang tidak memiliki tanda kutip dengan string KUNCI?


Saya ingin mengurai output json yang dihasilkan dari url berikut dalam framework SBJSON untuk iOS http://maps.google.com/maps?q=school&mrt=yp&sll=13.006389,80.2575&output=json

while(1);{title:"school - Google Maps",url:"/maps?q=school\x26mrt=yp\x26sll=13.006389,80.2575\x26ie=UTF8\x26hq=school\x26hnear=",urlViewport:false,ei:"RCu3T4eeMqSiiAe7k-yZDQ",form:{selected:"q",q:{q:"school",mrt:"yp",what:"school",near:""},d:{saddr:"",daddr:"",dfaddr:""},geocode:""},

saya menggunakan http://www.bodurov.com/JsonFormatter/ membacanya online.

Dalam metode respons ASIHttpRequest saya dihapus sementara (1); dari respon

NSString *responseString = [[request resonseString]substringFromIndex:9]; //to remove while(1)
SBJSONParser * parser = [[SBJSONParser alloc]init];
NSDictionary *jsonDict = (NSDictionary*)[parser objectFromString:responseString];
NSLog(@"%@",jsonDict) // prints null
// [responseString JSONValue] also reports error

Saya kira kunci JSON tanpa tanda kutip ganda menyebabkan masalah.

Dari pada {      "judul": "rumah sakit - Google Maps",     "urlViewport": salah,    }, kita mendapatkan {      judul: "rumah sakit - Google Maps",     "urlViewport": salah }

Tolong bantu saya untuk mengurai struktur JSON kompleks ini yang dikembalikan dari Google.


4
2018-05-19 09:37


asal


Jawaban:


Ini bekerja lebih baik untuk kasus saya karena nilai-nilai saya berisi waktu yang menyebabkan ekspresi reguler dalam jawaban di atas untuk dicocokkan secara salah.

json = [json stringByReplacingOccurrencesOfString: @"(\\w*[A-Za-z]\\w*)\\s*:"
                                       withString: @"\"$1\":"
                                          options: NSRegularExpressionSearch
                                            range: NSMakeRange(0, json.length)];

1
2017-09-05 21:47



Anda perlu menambahkan tanda kutip yang hilang ke kunci, jadi coba ini:

responseString = [responseString stringByReplacingOccurrencesOfString:@"(\\w+)\\s*:" 
                                 withString:@"\"$1\":" 
                                 options:NSRegularExpressionSearch 
                                 range:NSMakeRange(0, [responseString length])];

Ini harus bekerja dengan baik dengan string JSON yang diberikan.


0
2018-05-19 11:59