2013-05-07 3 views
0

J'ai un code comme ci-dessous. Je suis en train de lire une URL JSON et je fais écho à certains éléments avec certaines conditions. Je suis dans le besoin de réécouter les éléments sélectionnés au format JSON.Sortie JSON pour les articles

<?php 
// Array of trains to list 
//Arrival train list 
$trainNumbers = array(
    9021,11077 
); 

$json  = file_get_contents('myURL.json'); 
$trainData = json_decode($json, true); 
foreach ($trainData[0] as $train) { 

    $trainNumber = $train[0][0]; 
    if (in_array($trainNumber, $trainNumbers)) { 
     $fields = array(
      'train_no', 
      'train_name', 
      'dep_date', 
      'dep_station', 
      'dep_log', 
      'dep_lat', 
      'arr_station', 
      'delay_time', 
      'new_lat', 
      'new_long', 
      'new_station', 
      'new_station_name', 
      'time_delay', 
      'station_left' 
     ); 
     foreach ($train[0] as $i => $dataField) { 
      echo $fields[$i] . " - {$dataField}\n"; 
      $trains[$trainNumber][$fields[$i]] = $datafield; 
     } 
     echo "\n"; 

    } 
} 
?> 

Les données d'affichage de code ci-dessus comme

train_no - 09021 
train_name - MUMBAI BANDRA T - JAMMU TAWI Exp (SPL) 
dep_date - 2013-05-06 
dep_station - BRSQ 
dep_log - 28.613196 
dep_lat - 77.14046 
arr_station - BRAR SQUARE 
delay_time - 150 
new_lat - 28.659977 
new_long - 77.156425 
new_station - UMB 
new_station_name - AMBALA CANT JN 
time_delay - 48 
station_left - 67 

train_no - 11077 
train_name - PUNE - JAMMU TAWI Jhelum Express 
dep_date - 2013-05-06 
dep_station - HET 
dep_log - 26.611628 
dep_lat - 77.943449 
arr_station - HETAMPUR 
delay_time - 56 
new_lat - 26.697312 
new_long - 77.905769 
new_station - DHO 
new_station_name - DHAULPUR 
time_delay - 44 
station_left - 93 

Comment puis-je faire écho à nouveau la sortie au format JSON?

sur modifier comme suggéré ci-dessous

$data[$fields[$i]]= " - {$dataField}\n"; 
     echo json_encode($data); 

Je reçois cette erreur

enter image description here

Voici ce Teh JSON

http://pastebin.com/7EeVg8X9

En fait, dans ce script, nous avons liste pour 100 trains donc j'ai appelé certains des trains de cela.

+0

Vous ne faites pas simplement écho à la sortie en JSON - l'erreur que vous obtenez semble indiquer que vous essayez de l'analyser également. Notez que plusieurs objets JSON sont en cours de sortie, ce qui est la cause de l'erreur. – Perception

+0

@Perception Ensuite, comment et quand devrais-je changer pour obtenir les valeurs JSON – Yogus

+0

Confirmer ou refuser, vous essayez de sélectionner uniquement les noeuds (trains) dans le JSON qui correspondent aux numéros de train sélectionnés, et renvoyer le résultat entier en tant que JSON valide tableau? – Perception

Répondre

1

Actuellement, votre problème est que vous produisez chaque cartographié « train » comme un élément distinct. Pour que la sortie représente un JSON valide, les éléments séparés doivent au minimum être collectés dans un tableau. Voici une version légèrement modifiée de votre programme:

<?php 
// Fields to be translated 
$fields = array(
    'train_no', 
    'train_name', 
    'dep_date', 
    'dep_station', 
    'dep_log', 
    'dep_lat', 
    'arr_station', 
    'delay_time', 
    'new_lat', 
    'new_long', 
    'new_station', 
    'new_station_name', 
    'time_delay', 
    'station_left' 
); 

// Array of trains to list 
//Arrival train list 
$trainNumbers = array(
    9021,11077 
); 

$json  = file_get_contents('myurl.json'); 
$trainData = json_decode($json, true); 

foreach ($trainData[0] as $train) { 

    $trainNumber = $train[0][0]; 
    if (in_array($trainNumber, $trainNumbers)) { 

     foreach ($train[0] as $i => $dataField) { 
      $data[$fields[$i]]= $dataField; 
     } 

     $translated[] = $data; 
    } 
} 

echo json_encode($translated); 
?> 

qui sort (après le formatage avec jsonlint):

[ 
    { 
     "train_no": "09021", 
     "train_name": "MUMBAI BANDRA T - JAMMU TAWI Exp (SPL)", 
     "dep_date": "2013-05-06", 
     "dep_station": "HUK", 
     "dep_log": "28.801247", 
     "dep_lat": "77.102394", 
     "arr_station": "HOLAMBI KALAN", 
     "delay_time": "172", 
     "new_lat": "28.846516", 
     "new_long": "77.085357", 
     "new_station": "UMB", 
     "new_station_name": "AMBALA CANT JN", 
     "time_delay": 70, 
     "station_left": 64 
    }, 
    { 
     "train_no": "11077", 
     "train_name": "PUNE - JAMMU TAWI Jhelum Express", 
     "dep_date": "2013-05-06", 
     "dep_station": "BHA", 
     "dep_log": "27.06879445", 
     "dep_lat": "77.96653748", 
     "arr_station": "BHANDAI", 
     "delay_time": "59", 
     "new_lat": "27.157722", 
     "new_long": "77.989883", 
     "new_station": "AGC", 
     "new_station_name": "AGRA CANTT", 
     "time_delay": 45, 
     "station_left": 92 
    } 
] 

Vous pouvez choisir d'utiliser un autre type de sortie JSON (par exemple un objet racine avec chaque train claveté par nom, ou quoi d'autre). Il suffit d'étendre le même principe que ci-dessus pour générer un JSON valide.

+0

Belle :) ça a fonctionné comme charme: D: D: D – Yogus

1

Utilisez json_encode pour les données encodeing dans JSON

 $data[$fields[$i]]= $dataField; 
     echo json_encode($data); 

Vous obtiendrez plus d'aide de Here

+0

cela a fonctionné mais la sortie n'est pas parfaite au format JSON. Il montre l'erreur de l'analyseur – Yogus

+0

@Deonia quelle est l'erreur? – Shin

+0

http://i.imgur.com/zZjkIl9.png – Yogus