2012-07-23 7 views
1

J'ai un script php qui fait cela:JSON: Charset et obtenir la clé/valeur

$rows = array();   
while($r = mysql_fetch_assoc($sth2)) { 
$rows[] = array($r['alternative'] => $r['amount']); 
} 
print json_encode($rows); 

Je reçois cette sortie:

[{"\u00e5l":"3"},{"vin":"3"},{"whiskey":"1"},{"gin":"1"},{"rom":"1"},{"vodka":"1"}]

Problème un: \ u00e5 est censé être ø. Tout le reste fonctionne avec utf8 sauf cette fonction même, aucune idée de comment résoudre ce problème?

Le deuxième problème est que je n'arrive pas à lire les données en javascript. Je suis actuellement en utilisant ce code (je sais de pas bon, mais il devrait fonctionner pour l'instant):

$.each(obj, function(key, val) 
{ 
counter = counter +1 ; 
switch (counter) 
    { 
     case 0: 
      numberOne = key; 
      valueOne = val; 
      break; 
     case 1: 
      numberTwo = key; 
      valueTwo = val; 
      break; 
     case 2: 
      numberThree = key; 
      valueThree = val; 
      break; 
     case 3: 
      numberFour = key; 
      valueFour = val; 
      break; 
     case 4: 
      numberFive = key; 
      valueFive = val; 
      break; 
     case 5: 
      numberSix = key; 
      valuesix = val; 
      break; 
    } 
}); 
+0

Etes-vous sûr que vous obtenez des données codées UTF-8 à partir de votre base de données? [Gestion du recto-verso Unicode dans une application Web] (http://kunststube.net/frontback/) – deceze

+0

J'utilise la même base de données pour générer un sondage avec les mêmes valeurs, et il imprime très bien. Cependant, je n'utilise pas JSON pour cela. Je l'ai résolu en faisant mysql_set_charset ("utf8"); dans mon fichier php-connecteur. Ces chiffres sont utilisés pour faire un wordcloud des réponses du sondage. – Tom

+0

@Tom Ensuite, vous utiliserez probablement des données codées latin1 sur votre site, alors que json_encode et JSON en général attendent explicitement UTF-8. – deceze

Répondre

0

pour votre deuxième problème, vous pouvez utiliser

for(a in obj) 
{ 
    alert(a +' = '+obj[a]); 
} 

Vous havn't spécifié ce que vous voulez achive en lisant des propriétés d'objet Alors je suis parti pour vous :) espère que cela aide.

modifié:

for(a in obj) 
    { 
     alert(a +' = '+obj[a]); 
     for(b in obj[a]) 
     { 
     alert(b+' = '+obj[a][b]); // or alert(b+' '+obj[a].b); would work 
     } 
    } 
+0

il apparaît comme 0 = [Objet objet], 1 = [Objet objet], etc. – Tom

+0

parce que votre objet est plus profond et la valeur de la propriété est elle-même un objet. plus d'un niveau laissez-moi éditer ma réponse –

+0

Vous avez résolu les deux problèmes en 1! Très beau travail :) Merci! – Tom

1

Vous pouvez passer l'option JSON_UNESCAPED_UNICODE à json_encode.

Le code que vous utilisez pour lire les données semble en effet sous-optimal, mais il est difficile de commenter sur la façon de l'améliorer, car je ne peux pas dire ce que vous faites réellement avec les données.

+0

J'utilise ces données pour générer un wordcloud, mais quand j'essaie d'utiliser numberOne, mon wordcloud apparaît comme un grand 0. J'ai mysql_set_charset ("utf8"); dans mon fichier php-connector, et lors de la génération du sondage, il n'a aucun problème à imprimer ø comme ø. Mais je n'utilise pas JSON pour ça. – Tom

+0

La section de commentaire n'est pas un bon endroit pour discuter de cela, mais je ne peux pas imaginer pourquoi vous voudriez jamais diviser ce tableau en 6 paires de variables, qui ont même des nombres dans leurs noms!Il suffit de garder le tableau – Evert

+0

Il est parce que je dois les valeurs pour créer mon wordcloud comme ceci: var myTextList = [ \t \t \t \t \t {texte: numberOne, poids: parseInt (PremièreValeur)} .... etc – Tom

-3

Vous ne pouvez pas passer des valeurs nulles avec JSON. Remplacez-les par une chaîne vide. Je recommande le faire dans le niveau de requête par

case columnname when is null then '' end as newcolumnname 
+0

C'est ... pas très apropos‽ – deceze

+0

@deceze son problème n'est pas l'encodage de caractères. –

+0

Ce n'est pas? * "Je l'ai résolu en faisant mysql_set_charset (" utf8 "), dans mon fichier php-connector." * – deceze