php class produceert niet de juiste json

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Ik heb een probleempje met json objecten in mijn code. Ik heb het internet afgezocht en misshien dat het argument JSON_FORCE_OBJECT in de json_encode werkt, maar mijn wamp installatie flipt op php 5.3.0. Verder is het me een raadsel. Het zou toch ook zonder JSON_FORCE_OBJECT moeten kunnen. Ik ben er inmiddels ook achter dat je mysql_fetch_object moet gebruiken ipv mysql_fetch_assoc. Ook dat bracht geen soelaas.
Een gedeelte van mijn JSON uitput
{success: true, lokaties:[{"id":"1","alpha":"antwerpen","......{"id":"30","alpha":"wiekevorst","longitude":"4.7948325000","latitude":"51.10898870{success: true, lokaties:[{"id":"1","alpha":"antwerpen","longitude":"4.4011356000","latitude":"51.2198771000","..........

en dat produceer ik door de volgende php-code:
PHP:
1
2
3
4
5
function alleLokaties(){
    $conn = new db();
    $query = "SELECT * FROM lokatie";
    $conn->ophalen_json($query, 'lokaties');
}


class:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public function ophalen_json($query_string, $tabel)
    {
        $resultaat = mysql_query($query_string);

        if(!$resultaat)
        {
            echo '{success:false}';
            return false;
        }
        else
        {
            $arr = array();
            
            while($obj = mysql_fetch_object($resultaat))
            {
                $arr[] = $obj;
            }
            echo '{success: true, ' . $tabel . ':'. json_encode($arr) . '}';
        }
    }


Om een voor mij onduidelijke reden is het een object tot ongeveer id 30 (einde onderlijnde code). Dan wordt het ineens een nieuw object. Iemand een idee waar dat aan ligt

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 17:22
Ik ben er inmiddels ook achter dat je mysql_fetch_object moet gebruiken ipv mysql_fetch_assoc
Gelieve een waarom gebruiken? Aangezien hier met mijn code het ook perfect werkt met mysql_fetch_assoc, alleen moet ik wel een extra handeling verrichten om te krijgen wat ik wil..

Verder zou je eens de gehele JSON (string) willen posten?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Manuel schreef op dinsdag 23 maart 2010 @ 16:19:
Verder zou je eens de gehele JSON (string) willen posten?
En ook een dump van de gehele originele array zoals ie aan json_encode gegeven wordt.

Verder zou ik verwachten dat er bij elk id een nieuw object begonnen wordt (het is immers een array van objecten).

[ Voor 19% gewijzigd door .oisyn op 23-03-2010 16:23 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom zelf aan de json prutsen?

Doe dan gewoon:
PHP:
1
json_encode(array('succes' => true, $table => $result));

[ Voor 0% gewijzigd door Cartman! op 24-03-2010 08:20 . Reden: syntax error gefixt :P ]


Acties:
  • 0 Henk 'm!

Verwijderd

Cartman! schreef op dinsdag 23 maart 2010 @ 21:33:
Waarom zelf aan de json prutsen?

Doe dan gewoon:
PHP:
1
json_encode(array('succes' => true, $table' => $result));
Whehe, die is mooi. :+ Maar inderdaad, ik zal zelf niks aan de JSON doen als ik de TS was, daar is de functie tenslotte voor uitgevonden. :)
de json strings mogen opzicht wel in een [code][/] :Y

[ Voor 8% gewijzigd door Verwijderd op 23-03-2010 21:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dank voor de input.

Ik ben met Cartman zijn oplossing aan de slag.

Krijg het nog niet helemaal aan het werk, maar ok.

Al doende leert men.

Ik heb ook even verder gekeken in FireBug en daar zag ik dat er bij elke request vanuit Extjs een "invalid label:" error kwam.
Even googelen en daar vond ik dat het te maken had met het gebruik van ScriptTagProxy of HttpProxy .
http://www.extjs.com/forum/showthread.php?t=22990
Met HttpProxy is mijn probleem gedeeltelijk uit de wereld. Wat overblijft is een Json object met alles in drievoud.

'Back to the drawingboard' dus maar weer.

Waar ik denk ik de fout in ben gegeaan:

code:
1
echo '{success: true, ' . $tabel . ':'. json_encode($arr) . '}';


volgens JSONlint moet dit zijn:

code:
1
echo '{"success": "true", "' . $tabel . '" :'. json_encode($arr) . '}';


aanhalingstekens zijn noodzakelijk zo blijkt.

Ook wordt er gesproken over dat javascript niets met json kan doen als er geen () omheen staan en het eindigt met een ; , dus:

code:
1
echo '({"success": "true", "' . $tabel . '" :'. json_encode($arr) . '});';


kan iemand dit bevestigen?


Het in drievoud tonen doet hij dus blijkbaar alleen in FireBug Net->Resonse and HTML tab. In de HTML geeft hij keurig de data weer zoals het moet.

als JSON object krijg ik dan bijv:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "success": "true",
    "results": "2" ,
    "lokaties": [
        {
            "id": "402",
            "alpha": "nieuwkerken-waas",
            "longitude": "4.1787815000",
            "latitude": "51.1936164000",
            "code": "9100",
            "name": "Nieuwkerken-Waas",
            "provincie_id": "3"
        },
        {
            "id": "403",
            "alpha": "sint-niklaas",
            "longitude": "4.1392231000",
            "latitude": "51.1645487000",
            "code": "9100",
            "name": "Sint-Niklaas",
            "provincie_id": "3"
        }
    ]
}

[ Voor 53% gewijzigd door Verwijderd op 25-03-2010 13:44 ]


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 17:51
Misschien moet je even naar http://www.json.org/ kijken.

Jouw structuur kan er in PHP zo uit zien:
PHP:
1
2
3
4
5
6
7
8
9
<?php
$o = new stdClass();
$o->success = true;
$o->results = 2;
$o->locaties = array(
     (object)array('id'=>402,'code'=>9100),
     (object)array('id'=>403,'code'=>9100)
);
echo json_encode($o);


en dat levert op:
JavaScript:
1
{"success":true,"results":2,"locaties":[{"id":402,"code":9100},{"id":403,"code":9100}]}


Ik denk dat het het meest eenvoudig is als je je json maakt door volledig gebruik te maken van json_encode() en niet zelf nog iets er voor te plakken

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ondanks de
Ik ben met Cartman zijn oplossing aan de slag.
heb je dus niks gedaan met m'n reactie, wat verwacht je dan nog? Meer uitgekauwder dan rutgerw z'n voorbeeld ga je t ook niet krijgen meer.
Pagina: 1