2009-10-09 12 views
6

dlaczego funkcja JSON.stringify konwertuje ciąg.Empty ("") na "null" -String? Problem, dlaczego nie używam:JSON pusty ciąg

JSON.parse(json, function(key, value) { 
    if (typeof value === 'string') { 
     if (value == 'null') 
      return ''; 
     return value; 
    } 
}); 

... jest, jeśli ktoś naprawdę napisać "null" (to bardzo mało prawdopodobne, ale możliwe), mam problem do ...

dziękuję za każdą odpowiedź!

+0

Która funkcja JSON.stringify? Jaki język programowania? (JavaScript, jak sądzę?) Jakiej biblioteki JSON używasz? – Jesper

+0

FireFox mówi coś jeszcze: JSON.stringify ({a: ''}); -> {"a": ""} – jantimon

+0

tak, javascript. Używam: http://www.json.org/json2.js @Ghommey: masz rację! W FireFox działa poprawnie .... ale nie w Internet Explorerze .... –

Odpowiedz

1

teraz esiest rozwiązaniem tego problemu jest, aby zapakować „document.getElementById («id») wartości.” Ekspresja w konstruktorze klasy String:

JSON.stringify({a:new String(document.getElementById('id').value)}); -> {"a":""} 

nie mogę znaleźć podstawowy problem, ale z tym, że działa dobrze również w Internet Explorerze w FireFox.

Nie jestem zadowolony z tego brudnego rozwiązania, ale wysiłek nie jest zbyt duży.

JSON biblioteka: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

4

Old pytanie - ale jego górna wynik podczas wyszukiwania „json stringify pusty ciąg”, więc będę dzielić odpowiedź znalazłem.

Wygląda na to, że jest to błąd w niektórych wersjach IE8, gdzie puste elementy DOM zwracają wartość, która wygląda jak pusty ciąg znaków, zwraca wartość true w porównaniu do pustego ciągu znaków, ale w rzeczywistości ma inne kodowanie, które oznacza, że ​​jest to wartość pusta.

Jednym z rozwiązań jest zastępowanie za każdym razem, gdy wywołujesz stringify.

JSON.stringify(foo, function(key, value) { return value === "" ? "" : value });

Zobacz także http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx