2015-10-13 6 views
2

Salut J'essaie de créer une API qui convertit un tableau de résultats d'un appel de base de données en JSON qui peut être facilement analysé. En utilisant la commande simple json_encode, mon JSON est un désordre compliqué et verbeux d'objets imbriqués et de tableaux qui s'avèrent difficiles à analyser à l'autre extrémité.PHP/MYSQL/JSON: Simplifier JSON pour l'API

Quelqu'un peut-il suggérer un moyen de réduire cela à l'information clé qui devrait être fournie: ID utilisateur, commentaire long (lcom) et commentaire court (shcom) et comment l'envoyer comme API?

Merci à l'avance pour toute suggestion

Voici la sortie JSON courant produit à partir de la requête et le code suivant:

$sql = "SELECT userid,shcom,lcom FROM comments WHERE userid = 1 LIMIT 4"; 
$res = mysql_query($sql) or die(mysql_error()); 
$comments = array(); 
while($row = mysql_fetch_array($res)) { 
$comments[] = array('row'=>$row); 
} 
echo json_encode(array('comments'=>$comments)); 

Json output: 
{ 
    "comments": [ 
     { 
      "row": { 
       "0": "1", 
       "userid": "1", 
       "1": "hello", 
       "shcom": "hello", 
       "2": "hellothere", 
       "lcom”: "hellothere" 
      } 
     }, 
     { 
      "row": { 
       "0": "1", 
       "userid": "1", 
       “1”: ”agreed”, 
       "shcom”: ”agreed”, 
       “2”: ”agreedforonce”, 
       "lcom”: ”agreedforonce” 
      } 
     }, 
     { 
      "row": { 
       "0": "1", 
       "userid": "1", 
       "1": "gohome", 
       "shcom”: ”gohome“, 
       “2”: ”gohomenow”, 
       "lcom: ”gohomenow” 
      } 
     }, 
     { 
      "row": { 
       "0": "1", 
       "userid": "1", 
       "1": "getout”, 
       "shcom”: ”getout”, 
       “2”: ”getoutofhere”, 
       "lcom: ”getoutofhere” 
      } 
     } 
    ] 
} 
+0

La api réelle déversements juste sans aucun mot de pellicule. J'ai inséré les nouvelles lignes pour le rendre plus clair. – user1904273

Répondre

2

Vous devez utiliser mysqli plutôt que mysql depuis mysql est dépréciée. Peu importe, les problèmes dans votre code se produisent pour deux raisons. Un, mysql_fetch_array ne produit pas les résultats que vous attendez. Deuxièmement, dans votre itération, vous n'extrayez pas les réponses de la bonne façon. Pour résoudre ce problème, utilisez mysq_fetch_assoc et n'appliquez que chaque $row sur votre tableau final.

Remplacer ceci:

while($row = mysql_fetch_array($res)) { 
    $comments[] = array('row'=>$row); 
} 

à ceci:

while($row = mysql_fetch_assoc($res)) { 
    $comments[] = $row; 
} 
+0

Cela a fonctionné. Pour être clair, comme je suis flou sur la terminologie, est-il correct d'appeler la sortie [{"userid": "1", "shcom": "bonjour", "lcom": "bonjour là"}, {... }, {...}] un objet JSON constitué d'un tableau de dictionnaires? ou juste un objet constitué d'un tableau? – user1904273

+0

Votre résultat génère une chaîne ** au format JSON **. Vous pouvez ensuite transformer cette chaîne en un objet JSON en Javascript ou un tableau en PHP. – CodeGodie