-1

わかりました、問題をよりよく説明する必要があります。データを表示するiPhoneアプリケーションを開発しています。データは、php ファイルを使用して Mysql データベースから取得されます。

ここでは、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","nombre":"Pep\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"; } ) ブラウザのように...これは私の問題です.アクセントのある人がたくさんいるからです...

4

2 に答える 2

0

あなたの問題はJSONが機能していないことだと思います。NSArrayではなくNSDictionaryを使用する必要があります。

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

それはそれを解決するはずです。

于 2012-05-04T09:28:35.377 に答える
0

あなたの JSON は不格好に見えますが、実際には完全に間違っています。次のようになります。

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

たとえば、 http://json.parser.online.fr/のように、多くのバリデーターのいずれかで JSON 形式を確認することをお勧めします。

編集 デバッガーにだまされているようです...

私は次のことを試しました:

    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 で正しくエンコードされています。

編集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"]);
}
于 2012-05-04T09:47:52.310 に答える