2012-05-04 133 views
-1

好吧,我应该更好地解释这个问题。我开发了一个iPhone应用程序来显示数据。数据是使用php文件从Mysql数据库中获取的。JSON编码问题ios 5

在这里,我告诉PHP文件的代码:

<?php 
header("text/html; charset=utf-8"); 
//Credenciales de la BBDD 
$db = "json"; 
$host = 'localhost'; 
$username = "dpbataller"; 
$password = '1234'; 

//Conectamos al servidor de la Base de datos 
$link = mysql_connect($host,$username,$password) or die("No se puede conectar"); 
//Seleccionamos la BBDD 
mysql_select_db($db) or die ("No se ha podido seleccionar a la base de datos"); 
mysql_set_charset('utf8', $link); 
//Lanzamos la consulta 
$consulta = mysql_query("SELECT id,nombre from personas"); 
//Creamos un array para almacenar los resultados 
$filas = array(); 
//Agregamos las filas devueltas al array 
while ($r = mysql_fetch_assoc($consulta)) { 
$filas[] = $r;  
} 
//Devolvemos el resultado 
echo json_encode($filas); 
?> 

在这一刻,如果我上运行的浏览器的脚本,他返回 [{ “ID”: “0”, “农布雷”: “佩普\ u00e9”}]

此外,在Xcode项目我写了这个代码:

NSString *urlString = [NSString stringWithFormat:@"http://10.0.1.18/mysql_iphone/mostrar_personas.php"]; 

NSURL *url = [NSURL URLWithString:urlString]; 

NSData *data = [NSData dataWithContentsOfURL:url]; 

NSError *error; 

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
NSLog(@"%@", json); 

和控制台,返回: ( { id = 0; nombre =“Pep \ U00e9”; } ) 像浏览器...这是我的问题,因为我有口音的人noums ...

+3

你缺少您告诉我们您所遇到的问题的一部分。 – rckoenes

+0

这可能对于某些人来说是显而易见的,你都搞不清出现编码的Unicode字符,但我@rckoenes同意...请花一些时间来好好解释一下你的问题......我 – Alladinian

+0

改写了这个问题,抱歉 – dpbataller

回答

0

嗯,我猜你的问题是,你的JSON不工作,你需要使用NSDictionary不NSArray:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

这应该解决它。

+0

它不起作用,我认为php文件不能正确返回JSON编码,可以吗? – dpbataller

+0

看起来就是这个问题。 – shoughton123

0

你的JSON正在笨重,其实这是完全错误的。它应该看起来更像是这样的:

[{ 
    "id":1, 
    "name":"Jos \u00e9" 
}, 
{ 
    "id":2, 
    "name":"David" 
} 
] 

我建议你与很多验证的一个检查JSON格式在那里,例如像:http://json.parser.online.fr/

编辑 看来你得到经调试上当......

我试过如下:

NSError *error = nil; 
    NSData *data = [@"[{\"id\":\"0\",\"nombre\":\"Pep\u00e9\"}]" dataUsingEncoding:NSUTF8StringEncoding]; 

    NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
    NSLog(@"%@", json); 

    NSDictionary *item = [json lastObject]; 
    NSString *nombre = [item objectForKey:@"nombre"]; 

    NSLog(@"%@", nombre); 

第一个NSLog将打印转义字符,但提取的字符串实际上是以UTF8正确编码的。

EDIT 2

你的代码已经工作,你不需要改变任何东西

NSString *urlString = [NSString stringWithFormat:@"http://10.0.1.18/mysql_iphone/mostrar_personas.php"]; 

NSURL *url = [NSURL URLWithString:urlString]; 

NSData *data = [NSData dataWithContentsOfURL:url]; 

NSError *error; 

NSArray *items = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

// This will print all the names of people in your JSON. 
for (NSDictionary *item in items) 
{ 
    NSLog(@"nombre: %@", [item objectForKey:objectForKey:@"nombre"]); 
} 
+0

该信息由php脚本返回。如果我在浏览器上运行脚本,我可以看到这个[{“id”:“0”,“nombre”:“Pep \ u00e9”}] – dpbataller

+0

好的!此代码有效,但...如何适应我的代码?因为我从URL获取JSON对象。是否有可能?谢谢 – dpbataller

+0

好的!有用!但我需要将人员的姓名保存在数组中,而不是显示它。 我该怎么做? 非常感谢你,你正在帮助我很多.. – dpbataller