[PHP] json_decode() returned null

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed, ik ben al de hele dag aan het klooien met json_decode() onder PHP 5.1.6.

Lokaal, op PHP 5.2.3, werkt het prima wanneer ik onderstaande JSON wil decoden m.b.v. json_decode(). Ik krijg netjes een object terug met de juiste waarden. In PHP 5.1.6 (met de JSON extensie versie 1.2.1) op de server gaat het echter mis; json_decode() returned null op basis van onderstaande JSON. Een kleinere string werkt wel.

In de documentatie op http://nl2.php.net/manual/en/function.json-decode.php staat "This function will return false if the JSON encoded data is deeper than 127 elements.". Ik neem aan dat ze het daar over geneste elementen hebben, dus daar is geen sprake van. Daarnaast krijg ik geen false, maar echt null wanneer ik een gettype doe op de output van json_decode(). Volgens de documentatie zou dit duiden op incorrecte JSON, maar ik heb de JSON door de validator op http://www.jsonlint.com/ gehaald en die meent dat het valide JSON is (ik heb hier verder ook geen invloed op, komt van een externe bron).

Heeft iemand dit eerder aan de hand gehad en enig idee wat er aan de hand zou kunnen zijn? Ik ben het spoor helemaal bijster.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
    "gadgets": [
        {
            "author": "Philipp Lenssen",
            "authorEmail": "philipp.lenssen+widget@gmail.com",
            "description": "Displays a mini search which results in mini websites to be read on the personalized homepage. This module uses (or abuses) the Google Mobile search service.",
            "directoryTitle": "",
            "features": [
                
            ],
            "screenshot": "http:\/\/blog.outer-court.com\/homepage\/screenshot\/miniweb.jpg",
            "thumbnail": "",
            "title": "Mini Web",
            "titleUrl": "http:\/\/blog.outer-court.com",
            "authorAffiliation": "Google Blogoscoped",
            "authorLocation": "Stuttgart, Germany",
            "authorPhoto": "",
            "authorAboutme": "",
            "authorQuote": "",
            "authorLink": "",
            "showInDirectory": "",
            "showStats": "",
            "width": "",
            "height": "190",
            "categories": [
                "",
                ""
            ],
            "singleton": "",
            "scaling": "",
            "scrolling": "true",
            "links": [
                
            ],
            "views": {
                "profile": {
                    "name": "profile",
                    "type": "URL",
                    "href": "http:\/\/www.google.com\/xhtml",
                    "quirks": true,
                    "view": "",
                    "preferedHeight": "",
                    "preferedWidth": "",
                    "rewrittenContent": null
                }
            },
            "moduleId": "1",
            "url": "http:\/\/blog.outer-court.com\/homepage\/miniweb.xml",
            "iframeUrl": "\/gadgets\/ifr?container=nuik&v=6bc9235454dc5283f85f97cb4fdc9436〈=nl&country=NL&view=profile&url=http%3A%2F%2Fblog.outer-court.com%2Fhomepage%2Fminiweb.xml",
            "userPrefs": [
                
            ]
        }
    ]
}

Acties:
  • 0 Henk 'm!

Verwijderd

Heb je error_reporting en display_errors goed staan, zodat je eventuele foutmeldingen ziet? :D

[ Voor 31% gewijzigd door Verwijderd op 29-09-2008 14:23 ]


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

En wat gebeurt er als je de functie gebruikt met een kleiner, versimpeld JSON-bestand?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

http://brandonaaskov.com/?p=37
Misschien is dit wat voor je?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 29 september 2008 @ 14:22:
Heb je error_reporting en display_errors goed staan, zodat je eventuele foutmeldingen ziet? :D
Uiteraard :)
Johnny schreef op maandag 29 september 2008 @ 14:31:
En wat gebeurt er als je de functie gebruikt met een kleiner, versimpeld JSON-bestand?
Dan werkt 'ie remote ook. Als het echter een geheugenissue zou zijn ofzo dan zou er toch een foutmelding moeten volgen lijkt me?
Dank je. utf8_encode() had ik al geprobeerd zonder resultaat, en json_decode() vertellen de boel als array terug te geven geeft hetzelfde resultaat ;(

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Hoe heb je het getest? Heb je niet toevallig extra karakters in je invoer die hier niet zichtbaar zijn, zoals b.v. extra carriage return characters oid?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Op de PHP site staat trouwens te lezen dat de limiet ligt op 20 elementen wanneer gebruikt wordt gemaakt van PHP < 5.2.3. Deze limiet is in latere versies vergroot naar 128. Test gewoon eens met 20 en 21 elementen, dan weet je het zeker.

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

Noork schreef op maandag 29 september 2008 @ 15:00:
Op de PHP site staat trouwens te lezen dat de limiet ligt op 20 elementen wanneer gebruikt wordt gemaakt van PHP < 5.2.3. Deze limiet is in latere versies vergroot naar 128. Test gewoon eens met 20 en 21 elementen, dan weet je het zeker.
Maximaal 20 elementen diep. In de gegeven JSON wordt weinig genest, zeker geen 20 niveau's diep.

EDIT: TS, probeer het eens zonder de lege array's?

[ Voor 6% gewijzigd door Patriot op 29-09-2008 15:10 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Patriot schreef op maandag 29 september 2008 @ 15:05:
[...]
Maximaal 20 elementen diep. In de gegeven JSON wordt weinig genest, zeker geen 20 niveau's diep.
Idd, maar de PHP documentatie laat soms te wensen over. Ik zou het gewoon zelf testen voor de zekerheid. Wellicht worden 20+ elementen op niveau 1 hier ook onder gezien.

Acties:
  • 0 Henk 'm!

Verwijderd

Hier werkt het met PHP 5.2.0 wel gewoon, dus het is niet zo dat < 5.2.3 het niet aan zou kunnen. ;)

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

Hmm, het zit er in sinds 5.2.0, maar de TS zegt dat de PECL extensie gebruikt is. Ik kan me niet voorstellen dat het dan opeens anders werkt. Dat is natuurlijk wel een zwakte van de PHP documentatie, ik ga even neuzen bij die PECL extensie.

Als de TS nou eens begint met het eerste element, en dan steeds met een extra element test. Dan komt hij vanzelf bij het element dat het probleem veroorzaakt.

EDIT:

Heb even rondgekeken bij die PECL extensie, maar daar zit blijkbaar niet genoeg verschil in om dit te vermelden. Kans dat het precies hetzelfde is dus.

[ Voor 51% gewijzigd door Patriot op 29-09-2008 15:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor het meedenken allen. Vanavond of morgen kan ik verder testen en kom dan zeker terug op alle suggesties (met testresultaten).
Pagina: 1