Vraag over maken van Json file.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pascal Schuffelers

Pascal Schuffelers

14/09/2018 19:27:21
Quote Anchor link
Ik maak voor een chart de volgende Json file aan.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
  if ($result = $mysqli->query("SELECT CONCAT(Datum , ' ', Tijd) as Datum, MVRml10ml FROM metingen where Product = '$aProducts[$i]' order by Datum ASC limit 300")) {
                $tempArray = array();
                while($row = $result->fetch_object()) {
                    $tempArray = $row;
                    array_push($myArray, $tempArray);
                    }
                             $fp = fopen('results.json', 'w');
                fwrite($fp, json_encode($myArray,JSON_NUMERIC_CHECK));
                fclose($fp);


De aangemaakte Json file ziet er dan bv zo eruit.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[{"Datum":"1-1-2018 00:15","MVRml10ml":21.483},{"Datum":"1-1-2018 00:15","MVRml10ml":21.483},{"Datum":"1-1-2018 01:20","MVRml10ml":21.476}]


Deze chart wat ik gebruik is van amcharts.
Omdat ik verschillende data soorten heb en dus een dropdown met stukken heb die je in de grafiek kunt tonen dus bv kleur, soort enz.

Nu kun je dit in een grafiek doen maar dan je met functies in die code van hun werken en dat gaat ook alleen zij geven in de eerste data reeks een valuefield mee, dus hun voorbeeld zo.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[{"Datum":"15-11-2017","MVRml10ml":14.2,"MVR":24,"valueField":"MVR"},{"Datum":"16-11-2017","MVRml10ml":13.75,"MVR":19},{"Datum":"16-11-2017","MVRml10ml":14.35,"MVR":22},{"Datum":"16-11-2017","MVRml10ml":13.83,"MVR":14},{"Datum":"16-11-2017","MVRml10ml":13.99,"MVR":19}]


Dus hier zie je in het eerste stukje data dit voorkomen.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
{"Datum":"15-11-2017","MVRml10ml":14.2,"MVR":24,"valueField":"MVR"}....

Hoe kan ik dit ook maken zodat in de eerste data die valuefield invoeg en bij de rest niet zoals in hun voorbeeld?

Hopelijk te begrijpen wat ik bedoel.
 
PHP hulp

PHP hulp

14/11/2018 02:35:49
 
Rob Doemaarwat

Rob Doemaarwat

14/09/2018 20:08:37
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
while($row = $result->fetch_object()) {
  $tempArray = $row; //waarom dit eigenlijk?
  if(!$myArray) $tempArray["valueField"] = "MVR"; //alleen bij 1e record
  array_push($myArray, $tempArray);
}
 
Pascal Schuffelers

Pascal Schuffelers

14/09/2018 21:13:43
Quote Anchor link
Als ik dat zo plaats zoals jij vermeld.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
if ($result = $mysqli->query("SELECT CONCAT(Datum , ' ', Tijd) as Datum, MVRml10ml FROM metingen where Product = '$aCountries[$i]' order by Datum ASC limit 300")) {
                $tempArray = array();
                while($row = $result->fetch_object()) {
                    $tempArray = $row;
                   if(!$myArray), $tempArray["valueField"] = "MVRml10ml"; //alleen bij 1e record
                    array_push($myArray, $tempArray);
                    }
                    

                $fp = fopen('results.json', 'w');
                fwrite($fp, json_encode($myArray,JSON_NUMERIC_CHECK));
                fclose($fp);


Dan toont hij niets en zodra ik die if regel weg haal werkt het wel weer.
 
Rob Doemaarwat

Rob Doemaarwat

14/09/2018 21:22:24
Quote Anchor link
Volgens mij had ik er geen komma in staan ...
 
Pascal Schuffelers

Pascal Schuffelers

14/09/2018 21:38:04
Quote Anchor link
Hoe die er tussen komt geen idee, heb hem weg gehaald, maar dan maakt hij ook geen Json file aan, gebeurd niets.
 
Rob Doemaarwat

Rob Doemaarwat

14/09/2018 21:57:54
Quote Anchor link
Ik zie het al. Je fetcht idd een object, en geen (associatieve) array ($tempArray is dus geen array, maar een object ...). Dan wordt het:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
if ($result = $mysqli->query("SELECT CONCAT(Datum , ' ', Tijd) as Datum, MVRml10ml FROM metingen where Product = '$aCountries[$i]' order by Datum ASC limit 300")) {
                $tempArray = array();
                while($row = $result->fetch_object()) {
                    $tempArray = $row;
                    if(!$myArray) $tempArray->valueField = "MVR"; //alleen bij 1e record
                    array_push($myArray, $tempArray);
                    }
                    

                $fp = fopen('results.json', 'w');
                fwrite($fp, json_encode($myArray,JSON_NUMERIC_CHECK));
                fclose($fp);
 
Pascal Schuffelers

Pascal Schuffelers

14/09/2018 22:16:59
Quote Anchor link
Ah kijk, dat is wat ik wilde en wat werkt.
SUPER!!!! Thx.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/09/2018 22:28:31
Quote Anchor link
Genereer je dit bestand telkens opnieuw, mogelijk zonder dat er inhoudelijk iets verandert? Lijkt me nogal inefficiënt.
 
Pascal Schuffelers

Pascal Schuffelers

15/09/2018 17:36:21
Quote Anchor link
nou het werk zeer effient en super.
 
Thomas van den Heuvel

Thomas van den Heuvel

16/09/2018 11:56:34
Quote Anchor link
Ik bedoelde meer het volgende.

In code heb je verschillende operaties, sommige zijn relatief duur, andere zijn relatief goedkoop. Het manipuleren van bestanden valt ongeveer in de duurdere/duurste categorie.

Is het bijvoorbeeld mogelijk om de JSON rechtstreeks aan te leveren? Verandert de data sterk over tijd? De gekozen oplossingsrichting hangt mede/sterk af van het gedrag van de data. En als deze sterk verandert over tijd, heeft het dan wel zin om hier elke keer opnieuw een bestand voor te bakken? Ook is er niets bekend over de frequentie van de aanroep van deze functionaliteit. Is dit een zoekfunctie, of meer een export?

En als het dan toch via een bestand moet dan loont het misschien de moeite om het archiveren toch wat slimmer te maken dan het bovenstaande, mits de aard van de data zich hiervoor leent... waar je verder ook niets over vertelt, dus dat is dan nogal lastig in te schatten.

Tenzij je niet verder wil gaan dan "het werkt, dus het maakt mij verder niet uit hoe inefficiënt het is".
 
Pascal Schuffelers

Pascal Schuffelers

16/09/2018 12:02:50
Quote Anchor link
Die JSon file is alleen nodig om die grafiek zijn waarde te laten zien, dit is alleen ter indicatie op dat moment. Geen live stream of dergelijk nodig.
De hele opzet is , hal van gekozen product met waarde uit de database en schrijf het naar die file en de grafiek haalt het daar weer uit.
 
Thomas van den Heuvel

Thomas van den Heuvel

16/09/2018 12:43:30
Quote Anchor link
Maar ik zie daar een variabel stuk in je query: $aCountries[$i], en al de resultaten worden weggeschreven naar hetzelfde bestand, kun je dan niet beter per product een bestand bakken, of de JSON rechtstreeks naar de grafiek sturen als het kiezen van het product en het uitlezen/weergeven van de grafiek toch altijd op hetzelfde moment gebeurt? Wat is de noodzaak om een tussenstap te maken via een bestand? En als de stappen gescheiden zijn (kiezen product, weergeven grafiek) dan bestaat er toch ook het risico dat als twee verschillende personen verschillende productinformatie opvragen dat er een van de twee op den duur naar een verkeerde grafiek zit te turen omdat de data naar hetzelfde bestand wordt weggeschreven?
Gewijzigd op 16/09/2018 12:48:53 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.