Jemand anderes hatte dieses Problem in 2007, aber es wurde nicht beantwortet: In PHP schlägt json_encode ($ someArray) automatisch fehl (gibt null zurück), wenn das Array mehr als 6670 Zeilen enthält. Hat jemand einen Workaround? Wenn Sie beispielsweise die Größe des Arrays auf 6600 begrenzen, wird das erwartete Ergebnis erzielt. Ich kann einige JSON-Aufrufe mit partiellen Arrays machen und Ergebnisse verketten, aber das beinhaltet eine funky String-Manipulation, um sie richtig zusammenzufügen, und das würde ich gerne vermeiden.json_encode codiert nicht mehr als 6670 Zeilen
Antwort
Möglicherweise ist auf der PHP-Version abhängig ist und die für die Verwendung von PHP erlaubt Speicher (und möglicherweise auch die tatsächliche Größe aller Daten im Array). Was Sie tun könnten, wenn alles andere fehlschlägt, ist dies: Schreiben Sie eine Funktion, die die Größe eines gegebenen Arrays überprüft, dann einen kleineren Teil, der codiert werden soll, abspaltet, bis alle Teile codiert sind, und fügen Sie sie erneut hinzu . Wenn dies die Route ist, die du am Ende nimmst, poste einen Kommentar zu dieser Antwort, und vielleicht kann ich dir damit helfen. (Dies basiert auf der Antwort von Nytrix) EDIT, zB unter:
function encodeArray($array, $threshold = 6670) {
$json = array();
while (count($array) > 0) {
$partial_array = array_slice($array, 0, $threshold);
$json[] = ltrim(rtrim(json_encode($partial_array), "]"), "[");
$array = array_slice($array, $threshold);
}
$json = '[' . implode(',', $json) . ']';
return $json;
}
Prost! Obwohl ich denke, dass die Wahl für eine for-Schleife statt meiner while-whack noch ein bisschen besser ist. Zählen geht in einer Weile vorbei, fühlt sich einfach dreckig an. ^^ –
Kurz und gut. Ich mag das. Ich habe das noch nicht getestet, aber ich denke, es könnte das Komma zwischen "Brocken" weglassen. (Wenn ja, einfache Lösung) Nochmals vielen Dank. –
Ich habe diesen Code jetzt tatsächlich getestet, er wirft weder 'json' noch sonst etwas aus ... teste ihn [** hier **] (http://sandbox.onlinephpfunctions.com/code/58cecc502255d0800d742bf9e02e65208b73d47b) online – Nytrix
Sie könnten immer zuerst slice
das Array in 2 Teile (vorausgesetzt, es ist nicht größer als 2 mal diese Zeilen). Danach kodiere es und füge sie wieder zusammen. Falls das keine Lösung ist, müssen Sie Ihr Speicherlimit erhöhen.
Hier ist ein Beispiel, testen Sie es here. Auf @ GeertvanDijk Vorschlag habe ich dies eine flexible Funktion, um die Funktionalität zu erhöhen!
<?php
$bigarray = array(1,2,3,4,5,6,7,8,9);
function json_encode_big($bigarray,$split_over = 6670){
$parts = ceil((count($bigarray)/$split_over));
$start = 0;
$end = $split_over;
$jsoneconded = [];
for($part = 0; $part < $parts; $part++){
$half1 = array_slice($bigarray,$start,$end);
$name = "json".$part;
$$name = ltrim(rtrim(json_encode($half1),"]"),"[");
$jsoneconded[] = $$name;
$start += $split_over;
}
return "[".implode($jsoneconded,",")."]";
}
print_r(json_encode_big($bigarray));
?>
Ich habe jetzt dies mit mehr Zeilen dann 6.670 testen. Sie können es auch online here testen.
Nun muss ich erwähnen, dass ich die normale json_encode()
mit einer Million Zeilen getestet habe, kein Problem. Dennoch hoffe ich immer noch, dass dies Ihr Problem löst ...
Wenn Ihnen der Speicher ausgeht, können Sie
memory_limit
auf einen höheren Wert setzen. Ich würde dagegen raten, stattdessen würde ich die Daten in Teilen abrufen und diese in Teilen bearbeiten. Da ich nicht weiß, wie Sie diese Daten abrufen, kann ich kein Beispiel geben, wie Sie das regeln können. Hier ist, wie Sie den Speicher ändern, wenn Sie müssen (manchmal ist es die einzige Option und immer noch "gut").
ini_set("memory_limit","256M");
In diesem Fall ist es die Dubbel vom Standard, können Sie sehen, dass es 128M
in this documentation
- 1. Kann nicht mehr als 150 Zeilen einfügen
- 2. json_encode als undefined
- 3. Returns mehr als angeforderten Zeilen
- 4. PHP json_encode Zeilen als Objekte anstelle von Arrays zurückgeben
- 5. Linqpad Dump mehr als 1000 Zeilen
- 6. Unterabfrage mehr Zeilen als nötig verarbeiten
- 7. Aggregation mehrerer Zeilen mehr als einmal
- 8. Kann jemand erklären, warum dieses bestimmte PHP-Array mit json_encode nicht korrekt in Json codiert? Diese
- 9. jtable bekomme mehr als 100 Zeilen
- 10. Mehr als 1000 Zeilen bei T-Sql
- 11. Pandas nlargest mehr als n Zeilen
- 12. Cassandra bekommen mehr als 10k Zeilen
- 13. SQL Server 2012 Management Studio nicht mehr als 10.000 Zeilen
- 14. MySQL: Wählen Sie nicht mehr als X Zeilen eines Typs
- 15. jdbc/einfügen! auf sqlite3 verwaltet nicht mehr als zwei Zeilen
- 16. PHP nicht gezeigt mehr Zeilen
- 17. Kann nicht lesen json_encode
- 18. json_encode funktioniert nicht wie
- 19. php JSON_encode funktioniert nicht
- 20. json_encode (string) gibt Backslashes als Antwort
- 21. Ist Json_encode() sicherer als serialisieren in PHP?
- 22. PHP json_encode macht Objekt, nicht Array
- 23. json_encode arbeitet nicht für Nullwert
- 24. Referenz: Warum werden meine "speziellen" Unicode-Zeichen mithilfe von json_encode merkwürdig codiert?
- 25. Lese String als Bytes codiert Objekt
- 26. @EJB Lookup als Parameter statt hart codiert
- 27. Bildwähler mehr als eine
- 28. JMeter Zeichen ‚&‘ nicht codiert als ‚&‘ in der URL
- 29. base64_encode mehr als 1 Mal
- 30. nicht sms mehr als diejenigen
Könnten Sie ein minimales Beispiel für PHP-Code zur Verfügung stellen, die zeigt, wie und wann dies geschieht? – Pete
Haben Sie versucht, das Speicherlimit von PHP zu erhöhen? – AmericanUmlaut
Haben Sie die maximale Tiefe überprüft? –