• 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

VPS Starter Arubacloud
+2 głosów
338 wizyt
pytanie zadane 19 lipca 2021 w JavaScript przez stellatus Obywatel (1,390 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 (599,730 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 (190,190 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,390 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,390 p.)

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

1
komentarz 19 lipca 2021 przez Wiciorny Ekspert (269,120 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 Ekspert (251,210 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 Ekspert (269,120 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 Ekspert (251,210 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 (599,730 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 Ekspert (269,120 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 (599,730 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,390 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 984 wizyt
pytanie zadane 1 września 2020 w JavaScript przez Wiciorny Ekspert (269,120 p.)
0 głosów
4 odpowiedzi 1,922 wizyt
0 głosów
1 odpowiedź 153 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...