JSON für eine Spalte einer CSV-Datei?

  • Ich habe dies geschrieben, um eine Spalte mit Daten aus einer CSV-Datei zu ziehen, jedes Ergebnis in 2 zu teilen und dann als JSON zu formatieren, damit ich es in einer Web-App erledigen kann. Es funktioniert, aber es fühlt sich komisch und komisch an. Gibt es einen besseren Weg, dies zu tun?

     $fname = "subjects.csv";
    
    $half = array();
    $otherkeys = array();
    $records = array();
    
    
    if (($handle = fopen($fname, "r")) === FALSE) {
        exit;
    }
    
    /* First line is header with keys */
    $keys = fgetcsv($handle);
    
    echo '[';  //added the '['. here to get a propoerly formatted JSON response, not sure why I needed to but I did
    while (($data = fgetcsv($handle)) !== FALSE) {
        $half[] = ''.$data[0]/2;    //added the ''. here to get a propoerly formatted JSON response, not sure why I needed to but I did
        $otherkeys[] = $keys[0];
        $records = array_combine($otherkeys, $half);
        $response = json_encode($records);
        echo $response; 
    }
    fclose($handle);
    echo ']';  //added the ']'. here to get a properly formatted JSON response, not sure why I needed to but I did
     

    Irgendwelche Gedanken werden sehr geschätzt.

    11 December 2011
2 answers
  • Der Grund für das '[' und ']' war, das Array um die Datensätze zu legen. Besser ist es, das Array von Datensätzen in PHP zu erstellen und dieses dann zu kodieren. Folgendes würde ich tun:

     $fname = "subjects.csv";
    
    if (($handle = fopen($fname, "r")) === FALSE) {
        exit;
    }
    
    $records = array();
    
    /* First line is header with keys */
    $keys = fgetcsv($handle);
    
    while (($data = fgetcsv($handle)) !== FALSE) {
       $data[0] /= 2;
       $records[] = array_combine($keys, $data);
    }
    
    fclose($handle);
    
    echo json_encode($records);
     
    11 December 2011
    Tim C
  • Verwenden Sie stattdessen json_encode . Holen Sie einfach die gewünschten Daten in ein PHP-Array, wie Sie es bereits tun.

    11 December 2011