解析JSON数据

解析JSON数据

问题描述:

我从服务器JSON解析数据中的iPhone应用程序在跟随它的使用需要任意搜索文本字段,并张贴然后服务器文字和returs数据 匹配下面是我的iphone代码解析JSON数据

NSString*searchText=searchTextField.text; 

NSString *post =[[NSString alloc] initWithFormat:@"searchCode=%@",searchText]; 

NSURL *url=[NSURL URLWithString:@"http://www.celeritas-solutions.com/pah_brd_v1/productivo/searchCatalog.php?"]; 

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; 
[request setURL:url]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 


    NSError *error; 
    NSURLResponse *response; 
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 



    NSData* myData=[data dataUsingEncoding:NSUTF8StringEncoding]; 

    NSString *json_string = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; 
    NSArray *dataArr=[json_string JSONValue]; 

    for (int i=0; i<[dataArr count]; i++) { 


     if (!dataArr || !dataArr.count){ 


      if(resultArray!=nil){ 
       resultArray=nil; 
       resultArray=[[NSMutableArray alloc]init]; 
      } 




     } 



     NSDictionary *dict=[dataArr objectAtIndex:i]; 

     ObjectData *theObject =[[ObjectData alloc] init]; 



     [theObject setCategory:[dict objectForKey:@"category"]]; 
     [theObject setSub_Category:[dict objectForKey:@"sub_Category"]];  
     [theObject setContent_Type:[dict objectForKey:@"content_Type"]]; 
     [theObject setContent_Title:[dict objectForKey:@"content_Title"]]; 
     [theObject setPublisher:[dict objectForKey:@"publisher"]]; 
     [theObject setContent_Description:[dict objectForKey:@"content_Description"]]; 
     [theObject setContent_ID:[dict objectForKey:@"content_ID"]]; 
     [theObject setContent_Source:[dict objectForKey:@"content_Source"]]; 





     [resultArray addObject:theObject]; 
     [theObject release]; 
     theObject=nil; 



    NSLog(@"%@", json_string); 

这里是JSON字符串的结果

 ProductivoApp[2087:c203] -JSONValue failed. Error trace is: (
"Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognised leading character\" UserInfo=0x57b5a10 {NSLocalizedDescription=Unrecognised leading character} 

我对URL

PHP代码
 $flu=$_POST['searchCode']; 


     $query =mysql_query("SELECT * From catalog_Master WHERE category_Title LIKE '%$flu%'"); 

    $rows = array(); 
    while($row = mysql_fetch_assoc($query)) { 
    $rows[] = $row; 
    } 
+0

你是否检查过浏览器中的服务URL是否正确返回响应数据? – Ganapathy 2013-03-25 08:42:15

+0

为什么你有一个“?”在你的URL结尾处,在POST中你不需要它。希望这有助于 – jAmi 2013-03-25 08:47:38

+0

@Ganapathy它显示 警告:mysql_fetch_assoc():提供的参数不是在/home/content/i/h/u/ihus235/html/cs/pah_brd_v1/productivo/searchCatalog.php中的有效MySQL结果资源在线68 [] – 2013-03-25 08:49:59

根据您的最新评论,原因是您的查询失败。

首先,你不应该使用mysql_*函数。看到大红色框here。考虑使用PDOMySQLi代替。其次,看起来你可能会打开SQL injection。你应该是escaping your queries

第三,您应该对您的查询执行错误检查。类似的东西:

if(!$query) { 
    die('Query failed. ' . mysql_error()'); 
} 

这应该给你一个想法,为什么查询失败。

你还没有发布你的代码mysql_connect(),你也应该错误检查这一点。类似于:

$link = mysql_connect('localhost', 'user', 'pass'); 
if(!$link) { 
    // Handle it 
}