листья вложенного JSON как полные данные в JS - PullRequest
0 голосов
/ 30 октября 2019

У меня довольно большой вывод JSON с сервера, который мне нужно использовать в качестве источника данных для Tabulator.js на веб-странице. JSON является вложенным - 4x:

[{ "svn-revision" : "0.1", "timestamp" : "2019-10-28 12:18:19", "standort" : "Somewhere", "ausbildungen" : [ 
{ "id" : "", "about" : "Red", "subheader" : "", "klassen" : "stuff", "kurse" : [
    { "id" : "241", "datum" : "2019-12-20", "idstandort" : "40", "standort" : "House1", "bemerkung" : "", "kursplan" : "", "termine": [
        { "id" : "690", "datum" : "2020-01-04", "zeit_von" : "12:35:00", "zeit_bis" : "13:25:00", "about" : "lovely 01", "ids" : "" },
        { "id" : "691", "datum" : "2020-01-04", "zeit_von" : "13:30:00", "zeit_bis" : "15:10:00", "about" : "greedy 01", "ids" : "" },
        { "id" : "931", "datum" : "2019-12-20", "zeit_von" : "16:15:00", "zeit_bis" : "17:15:00", "about" : "lovely 02", "ids" : "" },
        { "id" : "932", "datum" : "2019-12-20", "zeit_von" : "18:15:00", "zeit_bis" : "19:15:00", "about" : "greedy 02", "ids" : "" },
        { "id" : "933", "datum" : "2019-12-21", "zeit_von" : "08:00:00", "zeit_bis" : "09:40:00", "about" : "greedy 03", "ids" : "" },
        { "id" : "946", "datum" : "2020-01-04", "zeit_von" : "09:50:00", "zeit_bis" : "11:30:00", "about" : "hate 16", "ids" : "" }]
    },
    { "id" : "278", "datum" : "2019-11-08", "idstandort" : "40", "standort" : "House1", "bemerkung" : "14:25", "kursplan" : "", "termine": [
        { "id" : "657", "datum" : "2019-11-08", "zeit_von" : "14:25:00", "zeit_bis" : "15:15:00", "about" : "lovely 02", "ids" : "" },
        { "id" : "681", "datum" : "2019-11-08", "zeit_von" : "15:20:00", "zeit_bis" : "17:00:00", "about" : "lovely 08", "ids" : "" }]
    },
    { "id" : "279", "datum" : "2019-11-08", "idstandort" : "40", "standort" : "House2", "bemerkung" : "15:20", "kursplan" : "", "termine": [
        { "id" : "657", "datum" : "2019-11-08", "zeit_von" : "14:25:00", "zeit_bis" : "15:15:00", "about" : "greedy 03", "ids" : "" },
        { "id" : "681", "datum" : "2019-11-08", "zeit_von" : "15:20:00", "zeit_bis" : "17:00:00", "about" : "greedy 09", "ids" : "" }]
    },
    }] 
} ] 
}]

Так что я ищу рекурсивный алгоритм, который изменяет это: Исходный формат:

[{lvl0[
    {lvl1-0[
        {lvl2-0[
            {lvl3-0-a},
            {lvl3-1-b},
            {lvl3-2-c}]
        },
        {lvl2-1[
            {lvl3-0-d},
            {lvl3-1-e},
            {lvl3-2-f}]
        }
        ]
    },
    {lvl1-1[
        {lvl2-0[
            {lvl3-0-g},
            {lvl3-1-h},
            {lvl3-2-i}]
        },
        {lvl2-1[
            {lvl3-0-j},
            {lvl3-1-k},
            {lvl3-2-l}]
        }
        ]
    }
]}]

на это:

[{lvl3-0-a, data from lvl2-0, data from lvl1-0, data from lvl0},
{lvl3-1-b, data from lvl2-0, data from lvl1-0, data from lvl0},
{lvl3-2-c, data from lvl2-0, data from lvl1-0, data from lvl0},
{lvl3-0-d, data from lvl2-1, data from lvl1-0, data from lvl0},
{lvl3-1-e, data from lvl2-1, data from lvl1-0, data from lvl0},
{lvl3-2-f, data from lvl2-1, data from lvl1-0, data from lvl0},
{lvl3-0-g, data from lvl2-0, data from lvl1-1, data from lvl0},
{lvl3-1-h, data from lvl2-0, data from lvl1-1, data from lvl0},
{lvl3-2-i, data from lvl2-0, data from lvl1-1, data from lvl0},
{lvl3-0-j, data from lvl2-1, data from lvl1-1, data from lvl0},
{lvl3-1-k, data from lvl2-1, data from lvl1-1, data from lvl0},
{lvl3-2-l, data from lvl2-1, data from lvl1-1, data from lvl0,}]

Итак, мой конечный объект должен выглядеть следующим образом:

{ "id" : "690", "datum" : "2020-01-04", "zeit_von" : "12:35:00", "zeit_bis" : "13:25:00", "about" : "lovely 01", "ids" : "" ,"idstandort" : "40", "standort" : "House1", "bemerkung" : "", "kursplan" : "","standort" : "Somewhere"}

Я довольно новичок в JSON и пока не использовал здесь рекурсию. Что я пробовал: я пытался использовать нотацию tabular.js lvl0.lvl1.lvl2.lvl3something, но не получил данных, так как это не работает с массивами. Я застрял на этом некоторое время и действительно не могу найти никакого ответа на этот вопрос, все вопросы, которые я могу найти, касаются выравнивания массивов, в то время как мне нужно расширить листы с помощью верхней информации lvl. Я пытался разобрать его с php без успеха. Как мне это сделать? Возможно, есть какое-то простое решение, которое ускользает от меня? Нужно ли сохранять данные в другой файл или я могу просто разобрать их и отправить в tabulator.js? Спасибо за любую помощь.

1 Ответ

0 голосов
/ 01 ноября 2019

ОК, я работал над этим. Понял, что для загрузки было бы лучше сделать это на сервере, поэтому я воспользовался PHP. Вот мой код, надеюсь, это кому-нибудь поможет. Еще один вопрос: вывод массивов строк происходит в нижнем слое цикла. Как мне объединить все мои массивы в один JSON и сохранить это где-нибудь на моем сервере? Спасибо за любую помощь.

<!DOCTYPE html><html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<html xmlns="http://www.w3.org/1999/xhtml">
<title>mmmJSONParse</title>
<body>
<h1>MMM JS JSONPath altered</h1>
<p>.FUCK.</p>
<?php
$url = 'data1.json'; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$taoz = json_decode($data, true); // decode the JSON feed
//print_r ($echolons);
$j = 0;
$i = 0;
$result = '';
$fileName = "written.json";
                            $fp = fopen($fileName, 'w');
                            if( $fp == false )
                            {
                                echo ( "Error in opening file" );
                                exit();
                            }
                            fwrite( $fp, "{" );
echo "<br/><br/> YEAH: <br/>";
    foreach ($taoz as $tao) {
        echo $tao['standort'] . '<br>';

        $ausbildungen = $tao['ausbildungen'];
            foreach ($ausbildungen as $ausbildung){
            //echo $ausbildung['subheader'] . '<br>'; //. ' "Bemerkung" : ' . $kurs['bemerkung'].'<br>';

                $kurse = $ausbildung['kurse'];
                    foreach ($kurse as $kurs){
                    //echo $kurs['standort'] . '<br>';
                        $j = $i;
                        $j++;
                        $termine = $kurs['termine'];
                            $i = ($j-1);
                            foreach ($termine as $termin){
                            $i++;
                            //echo $kurs['id'] . ' "Standort" : "' .  $kurs['standort'] . '", "Datum" : "' . $termin['datum']. '", "Anfang" : "' . $termin['zeit_von']. '", "Ende" : "'. $termin['zeit_bis'] .'", "Beschreibung" : "'. $termin['bezeichnung'] . '"<br>';
                            $rowresult = array(
                                'index' => $i,
                                'id' => $kurs['id'],
                                'klasse' => $termin['bezeichnung'],
                                'standort' => $kurs['standort'],
                                'termin' => $termin['datum'],
                                'anfang' => $termin['zeit_von'],
                                'ende' => $termin['zeit_bis'],
                                'txt' => $termin['bezeichnung']
                            );
                            //echo json_encode($rowresult);
                            //$result = array_merge(($result),($rowresult));
                            $rowresultjson = json_encode($rowresult);
                            echo $rowresultjson;
                            //$result = json_encode(array_merge(json_decode($result, true),json_decode($rowresultjson, true)));
                            //echo json_encode($result);
                            //echo json_encode($result);

                            fwrite($fp, print_r($rowresultjson, TRUE));
                            fwrite( $fp, "," );
                            }
                    }
            }
    }
    //echo $result;
fwrite( $fp, "}" );
fclose($fp);


?>
  </body>
  </html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...