2012-05-27 48 views
1

當我第一次調用SBJsonParser時,它工作正常,但在第二次嘗試時,結果始終爲空。數據格式與第一個完全相同。SBJSON解析器不能在第二次嘗試中工作

下面是代碼:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // the connection finished loading all data, process... 
    // Store incoming data into a string 
NSString *jsonString = [[NSString alloc] initWithData:self.jsonData encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",jsonString); 

if (jsonString != nil) { 

    // Create SBJSON object to parse JSON 
    SBJsonParser *parser = [[SBJsonParser alloc] init]; 

    NSDictionary *results = 
    [parser objectWithString:jsonString error:nil]; 


    NSLog(@"results: %@", results); 

    if ([[results objectForKey:@"postalCodes"] count] > 0) { 

     // Build an array from the dictionary for easy access to each entry 
     NSArray *postalCodes_array = [results objectForKey:@"postalCodes"]; 

     int index = 0; 
     // Loop through each entry in the dictionary... 
     for (NSDictionary *dict_item in postalCodes_array) 
     { 
      if (index == 0) { 
       appDelegate.curZip = [dict_item objectForKey:@"postalCode"]; 
       NSLog(@"New Zip: %@", appDelegate.curZip); 
       break; 
      } 
     } 
     postalCodes_array = nil; 
     parser = nil; 
     } 
     results = nil; 
    } 
    jsonString = nil; 
    } 

下面是打印出上面的NSLog行:

首先嚐試:

2012-05-27 12:19:13.322[16525:707] {"postalCodes":  [{"adminName2":"Union","adminCode2":"039","distance":"0","adminCode1":"NJ","postalCode":"07201","countryCode":"US","lng":-74.2099,"placeName":"Elizabeth","lat":40.661369,"adminName1":"New Jersey"},{"distance":"0.28183","adminCode1":"NJ","postalCode":"07216","countryCode":"US","lng":-74.210939,"placeName":"Elizabeth","lat":40.663778,"adminName1":"New Jersey"},{"distance":"0.28183","adminCode1":"NJ","postalCode":"07215","countryCode":"US","lng":-74.210939,"placeName":"Elizabeth","lat":40.663778,"adminName1":"New Jersey"},{"adminName2":"Union","adminCode2":"039","distance":"1.12041","adminCode1":"NJ","postalCode":"07202","countryCode":"US","lng":-74.221544,"placeName":"Elizabeth","lat":40.65652,"adminName1":"New Jersey"},{"adminName2":"Union","adminCode2":"039","distance":"1.72655","adminCode1":"NJ","postalCode":"07206","countryCode":"US","lng":-74.192487,"placeName":"Elizabeth","lat":40.653207,"adminName1":"New Jersey"}]} 

第二次嘗試:

2012-05-28 20:16:16.727 [17151:707] {"postalCodes":[{"adminName2":"Kings","adminCode2":"047","distance":"0","adminCode1":"NY","postalCode":"11230","countryCode":"US","lng":-73.956528,"placeName":"Brooklyn","lat":40.618122,"adminName1":"New York"},{"adminName2":"Kings","adminCode2":"047","distance":"1.38292","adminCode1":"NY","postalCode":"11210","countryCode":"US","lng":-73.946682,"placeName":"Brooklyn","lat":40.628064,"adminName1":"New York"},{"adminName2":"Kings","adminCode2":"047","distance":"2.04126","adminCode1":"NY","postalCode":"11229","countryCode":"US","lng":-73.94749,"placeName":"Brooklyn","lat":40.601094,"adminName1":"New York"},{"adminName2":"Kings","adminCode2":"047","distance":"2.45579","adminCode1":"NY","postalCode":"11204","countryCode":"US","lng":-73.985623,"placeName":"Brooklyn","lat":40.617871,"adminName1":"New York"},{"adminName2":"Kings","adminCode2":"047","distance":"2.70498","adminCode1":"NY","postalCode":"11223","countryCode":"US","lng":-73.974291,"placeName":"Brooklyn","lat":40.597874,"adminName1":"New York"}]}{"postalCodes":[{"adminName2":"Richmond","adminCode2":"085","distance":"0","adminCode1":"NY","postalCode":"10306","countryCode":"US","lng":-74.141922,"placeName":"Staten Island","lat":40.564416,"adminName1":"New York"},{"adminName2":"Richmond","adminCode2":"085","distance":"0.41508","adminCode1":"NY","postalCode":"10313","countryCode":"US","lng":-74.146836,"placeName":"Staten Island","lat":40.564393,"adminName1":"New York"},{"adminName2":"Richmond","adminCode2":"085","distance":"1.66907","adminCode1":"NY","postalCode":"10308","countryCode":"US","lng":-74.152649,"placeName":"Staten Island","lat":40.55181,"adminName1":"New York"},{"adminName2":"Richmond","adminCode2":"085","distance":"3.76947","adminCode1":"NY","postalCode":"10312","countryCode":"US","lng":-74.179165,"placeName":"Staten Island","lat":40.545745,"adminName1":"New York"},{"adminName2":"Richmond","adminCode2":"085","distance":"4.41459","adminCode1":"NY","postalCode":"10314","countryCode":"US","lng":-74.147218,"placeName":"Staten Island","lat":40.603915,"adminName1":"New York"}]} 

    2012-05-28 20:16:16.760 [17151:707] error: Error Domain=org.brautaset.SBJsonParser.ErrorDomain Code=0 "Token 'start of object' not expected after outer-most array or object" UserInfo=0x176560 {NSLocalizedDescription=Token 'start of object' not expected after outer-most array or object} 

    2012-05-28 20:16:16.761 [17151:707] results: (null) 

正如你所看到的,我我每次都在做init。不知道爲什麼它不起作用。任何建議表示讚賞。

謝謝

+0

我相信Paul Hunter的回答可以回答你的問題。請你能接受嗎? –

回答

1

在你的第二個嘗試JSON是無效。這就是爲什麼它沒有被解析。你可以在這裏檢查它:http://jsonlint.com/

在JSON字符串的末尾,好像已經插入了一些垃圾。如果你格式化字符串,你會在第51-53行找到問題。更換用逗號如下:

] 
}{ 
"postalCodes": 

在仔細檢查它看起來像你只placeName ==「伊麗莎白」感興趣。在最後你有一個條目placeName ==「Fanwood」。所以你可能只想刪除行51-62

另外,您可以使用error參數來檢測解析器的問題。

NSError *error = nil; 
NSDictionary *results = [parser objectWithString:jsonString error:&error]; 

if (error) { 
    // we have a problem 
} 
+0

我更新了第二個嘗試代碼,並添加了錯誤消息print out。我試圖在手動發佈之前刪除一些行 - 我可能刪除了太多行。現在的輸出是一樣的。我打電話給同一個Web服務以獲得第一次和第二次嘗試的結果,格式應該是正確的。 – user1248747

+0

JSON仍然完全畸形。我不知道你的數據源是什麼,但是它並不是給你工作的JSON。 –

+0

嘗試將JSON複製粘貼到此頁面中的框中:http://jsonlint.com/。你會看到它是無效的。 –

0

爲什麼一個意外的數組括號在這裏關閉?在第二個json sring中?

"placeName":"Elizabeth","lat":40.653207,"adminName1":"New Jersey"}]}{"postalCodes":{"adminName2":"Union","adminCode2":"039","distance":"3.97758","adminCode1":"NJ","postalCode":"07023","countryCode":"US","lng":-74.386762,"placeName":"Fanwood","lat":40.641856,"adminName1":"New Jersey"}]} . 

它不是一個init.its的問題,你得到的jsonstring錯誤。

相關問題