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

eksport obiektu JS do JSON, znikające spacje w stringach

+2 głosów
98 wizyt
pytanie zadane 19 lipca 2021 w JavaScript przez stellatus Obywatel (1,370 p.)
edycja 19 lipca 2021 przez stellatus

https://codepen.io/reti/pen/MWmoEBm

Dlaczego zniknęły spacje w stringach? Jaki jest najprostszy sposób na eksport obiektu JS do pliku JSON?

3 odpowiedzi

+2 głosów
odpowiedź 19 lipca 2021 przez Comandeer Guru (562,680 p.)
wybrane 20 lipca 2021 przez stellatus
 
Najlepsza

Osobiście pewnie bym zrobił z tego Object URL-a. Dzięki temu można ominąć wszystkie problemy związane z potrzebą enkodowania stringa. PoC: https://codepen.io/Comandeer/pen/mdmwYZN

+2 głosów
odpowiedź 19 lipca 2021 przez ScriptyChris Mędrzec (171,760 p.)

To ma pewnie związek z użyciem Data URL, który wycina m.in. spacje. Możesz zastąpić wycinane znaki odpowiednio je enkodując funkcją encodeURIComponent lub ręcznie poprzez String.prototype.replace (dla spacji będzie to %20).

komentarz 19 lipca 2021 przez stellatus Obywatel (1,370 p.)
Dzięki. Będę miał to na uwadze. Na razie wystarczy mi to "text/plain".
1
komentarz 19 lipca 2021 przez stellatus Obywatel (1,370 p.)

@ .::VBService::. Dzięki. Będę miał to na uwadze.

1
komentarz 19 lipca 2021 przez Wiciorny Mędrzec (196,740 p.)

@ScriptyChris, a nie jest to związane z tym że obiekty JSON są przesyłane tak naprawdę w formacie "String jason"?  a nie czystym jsonem tzn jako typem obiektowym 
W końcu używa tu metody 
 

  var json = JSON.stringify(data);

a to nie przesyła JSON'a tylko STRING JSON 

1
komentarz 19 lipca 2021 przez VBService VIP (144,010 p.)

@Wiciorny chyba to dlatego, tak jak napisałeś  wink (nie zwróciłem uwagi na to wcześniej, ten upał, mózg się gotuje)

a nie jest to związane z tym że obiekty JSON są przesyłane tak naprawdę w formacie "String jason"? 

var data = [{
  key: '1',
  name: 'Lorem ipsum dolor',
  age: 32,
  address: 'Lorem ipsum dolor'
}, {
  key: '2',
  name: 'Lorem ipsum dolor',
  age: 42,
  address: 'Lorem ipsum dolor'
}];

console.log(typeof(data))
console.log(typeof(JSON.stringify(data)))

 

 

komentarz 19 lipca 2021 przez Wiciorny Mędrzec (196,740 p.)

ja ten problem z Javą mam bo generalnie jak używa się w Springu adnotacji @RequestBody, to on oczekuje podania  json-stringa, a nie jsona stąd  bywały problemy w api  JAVY z parsowaniem tego, zanim się nie okazało że to trzeba stringify robić 
 

 

Previously, I thought that in the SpringMVC environment, @RequestBody received a Json object, and the debugging code was not successful. Later, I found that @RequestBody received a Json object character. String, not a Json object. However, in the ajax request is often passed JSON object, and later found that JSON.stringify (data) can be used to turn the object into a string. At the same time, when ajax requests, [color=blue][b] specifies dataType: "json", contentType: 

więc tutaj wyczułem coś podobnego 

komentarz 19 lipca 2021 przez VBService VIP (144,010 p.)

dlatego Moim zdaniem zapis działa prawidłowo: text/plain

a.href = "data:text/plain;charset=utf-8," + json;

 

1
komentarz 19 lipca 2021 przez Comandeer Guru (562,680 p.)
Ale JSON "w formie obiektowej" to oksymoron. Bo to po prostu obiekt w JS, a nie JSON. JSON to właśnie format tekstowy, oparty na składni JS.
1
komentarz 19 lipca 2021 przez Wiciorny Mędrzec (196,740 p.)

to dlaczego data:application/json zwraca OBIEKT, a nie format tekstowy? Bo tak czytam i jakoś widzę masło maślane mi się robi

1
komentarz 19 lipca 2021 przez Comandeer Guru (562,680 p.)

Bo praktycznie wszystkie frameworki itd. obsługują konwersję JSON-a do własnego formatu obiektów out of the box. Ale przez Sieć normalnie leci tekst – deserializacja następuje już po stronie klienta.

Sama specka JSON wyraźnie zaznacza, że to format tekstowy:

JSON* is a text syntax […]

0 głosów
odpowiedź 19 lipca 2021 przez stellatus Obywatel (1,370 p.)

nie wiem o co chodzi, ale zmieniłem:

a.href = "data:application/json;charset=utf-8," + json;

na:

a.href = "data:text/plain;charset=utf-8," + json;

i działa :)

Podobne pytania

0 głosów
3 odpowiedzi 302 wizyt
pytanie zadane 1 września 2020 w JavaScript przez Wiciorny Mędrzec (196,740 p.)
0 głosów
4 odpowiedzi 1,182 wizyt
0 głosów
1 odpowiedź 118 wizyt

86,448 zapytań

135,207 odpowiedzi

300,348 komentarzy

57,196 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...