• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zbyt duży JSON zwracany przez Symfony, PHP (transitions)

Object Storage Arubacloud
0 głosów
275 wizyt
pytanie zadane 21 kwietnia 2018 w PHP przez wneku Nowicjusz (200 p.)

Hej,
mam aplikację postawioną w Symfony oraz Angularze. Symfony słuzy tylko do łączenia się z bazą i wystawiania angularowi JSONy. Wszystko jest ok poza jedną rzeczą. Gdy chce przekazać JSON który zawiera datę dostaję mnóstwo niepotrzebnego kodu związanego z konwertowaniem daty tj.:

transitions: [

  • {
    • ts: -9223372036854776000,

    • time: "-292277022657-01-27T08:29:52+0000",

    • offset: 5040,

    • isdst: false,

    • abbr: "LMT"

    },
  • {
    • ts: -2147483648,

    • time: "1901-12-13T20:45:52+0000",

    • offset: 5040,

    • isdst: false,

    • abbr: "WMT"

    },
    (...)

Myślałem na początku, że to coś w ustawieniach MySQLa ale nie. Zmieniłem w php.ini domyślną strefę czasową i w każdej pojawia się ten problem. Do jednej daty jest kilka tysięcy takich linijek. 

przykładowy JSON:
https://pastebin.com/nny5XFCg

Myślę, że to jest jakaś opcja  którą trzeba ustawić w php.ini ale szukałem już tyle czasu na tylu forach i nigdzie nie było odpowiedzi na to. Dzięki z góry za odpowiedź.

4 odpowiedzi

0 głosów
odpowiedź 21 kwietnia 2018 przez CzikaCarry Szeryf (75,340 p.)
Pokaż dokładnie co zwracasz w Symfony. Pokaż kod, możliwe że "jsonujesz" cały obiekt z datą zamiast po prostu stringa :)
0 głosów
odpowiedź 21 kwietnia 2018 przez wneku Nowicjusz (200 p.)
public function getQuizAction($id) {
        $helpers = $this->get(Helpers::class);
        $em = $this->getDoctrine()->getManager();
        $test = $em->getRepository("QuizBundle:Quiz")->findOneBy(array(
            "id" => $id
        ));
        
      
        return $helpers->json($test);
  }


funkcja helpera:
public function json($data){
        $normalizers=array(new \Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer());
        $encoders= array("json" => new \Symfony\Component\Serializer\Encoder\JsonEncode());
        
        $serializer= new \Symfony\Component\Serializer\Serializer($normalizers,$encoders);
        $json= $serializer->serialize($data, 'json');
        
        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->setContent($json);
        $response->headers->set("Content-Type", "application/json");
        
        return $response;
}

 

0 głosów
odpowiedź 22 kwietnia 2018 przez wneku Nowicjusz (200 p.)
Dobra wziąłem w geterze przekonwertowałem datę, żeby wzracało stringa odpowiednio sformatowanego. Innego pomysłu nie mam.
0 głosów
odpowiedź 24 kwietnia 2018 przez wojtekson16 Bywalec (2,640 p.)

W symfony jest normalizer do daty - https://github.com/symfony/serializer/blob/master/Normalizer/DateTimeNormalizer.php. Użyj jego zamiast robić to w getterze. 

Przy okazji w zamiast budować Response od nowa możesz wykorzystać https://github.com/symfony/http-foundation/blob/master/JsonResponse.php i statyczną faktorkę JsonResponse::fromJsonString.

Podobne pytania

+1 głos
1 odpowiedź 812 wizyt
pytanie zadane 15 grudnia 2018 w PHP przez kenjiro244 Dyskutant (8,600 p.)
0 głosów
1 odpowiedź 228 wizyt
pytanie zadane 23 kwietnia 2019 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)
0 głosów
1 odpowiedź 384 wizyt
pytanie zadane 4 czerwca 2016 w PHP przez patryk23 Początkujący (290 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...