object in json-string umwandeln
Joachim
- javascript
Hi,
klar, gibts schon. Aber selber bauen macht mehr Spass, deshalb habe ich mir eine kleine Funktion dafür erstellt. Damit möchte ich lediglich "überschaubare" Objekte, die strukturell dem Beispiel ähneln, wandeln.
Ich würde mich über Optimierungstipps freuen, insbesonder zum Handling des abschliessenden Kommas einer Liste, die ja im IE zu Fehlern führen und daher nicht erscheinen dürfen. Ich habe das einmal mit Subparts und join bzw einem Flag, ein anderes Mal mit einem Replace vie regEx der jeweils der letzten Kommas gelöst.
Test mit Subparts, join und flag
Test mit regEx und replace
Natürlich bin ich ebenso über andere Hinweise, vor allem auch zu möglichen Fehlerquellen dankbar. Bedenkt aber, das Ding soll keine Wunderwaffe werden, wenn es mit Date nicht umgehen kann ist das für mich ok...
Gruesse, Joachim
Lieber Joachim,
für eine gültige JSON-Syntx musst Du meines Wissens auch den Eigenschaften-Namen in doppelte Anführungszeichen setzen. In JavaScript braucht man das nicht, in JSON aber wohl.
var JSONObj = {
"eigenschaft" : "wert",
"methode" : function (param) {
// Code
}
}
Liebe Grüße,
Felix Riesterer.
Hallo,
Sonst kannst du an der Algoritmik durchaus etwas arbeiten, meine Funktion sieht z.B. so aus:
Object.toJSON = function(o) {
switch((typeof(o)).toLowerCase()) {
case 'object':
var s = '{';
var p = [];
for(i in o) {
var e = Object.toJSON(i)+': '+Object.toJSON(o[i])+'';
p.push(e);
}
s += p.join(', ');
s += '}';
return s;
case 'string':
return "'"+o.escapeSingleQuoted().replaceJSSpecialChars()+"'";
case 'number':
return o+'';
case 'boolean':
return o+'';
case 'function':
return (o+'').escapeSingleQuoted().killJSSpecialChars();
}
return false;
}
mfg, Flo
Hi,
- Du berücksichtigst keine Funktionen
ja, das war für meine Zwecke nicht so wichtig...
Sonst kannst du an der Algoritmik durchaus etwas arbeiten
da hst Du wohl recht ;-)
var e = Object.toJSON(i)+': '+Object.toJSON(o[i])+'';
das ist sehr schön und löst das Komma-Thema komplett...
replaceJSSpecialChars()
welche Zeichen ersetzt/entfernst Du? Ich nehme an Zeilenumbrüche u. ä...
Erst mal vielen Dank, auch an Felix. Das hilft mir weiter...
Gruesse, Joachim
Hallo,
| var e = Object.toJSON(i)+': '+Object.toJSON(o[i])+'';
das ist sehr schön und löst das Komma-Thema komplett...
Ja :)
| replaceJSSpecialChars()
welche Zeichen ersetzt/entfernst Du? Ich nehme an Zeilenumbrüche u. ä...
genau
Erst mal vielen Dank, auch an Felix. Das hilft mir weiter...
kein problem
mfg, Flo
liebe Kinder,
habt Ihr Euch, bevor Ihr jeder fuer sich ueber das ziel hinausgeschossen seid,
auch nur einmal die muehe gemacht, die nicht sonderlich umfangreiche und
auch keineswegs misszudeutende JSON-spezifikation ueberhaupt zu lesen?
bessere bildungsvorschriften wie die auf »json.org« aufgefuehrten schemata gibt
es nicht und braucht es auch nicht.
alles was in vermeintlichen JSON-notationen an mehr neben [Object]- und
[Array]- objekten, [string]-, [number]-, und boolean-werten sowie [null]
enthalten ist, laesst diese notationen genau das sein, was sie sind:
native JavaScript-objekt_LITERAL_-notationen.
@Flo(levu):
Deine von Dir gepostete bildungsvorschrift wirft einen [TypeError], sobald ich
versuche, eins der von Joachim beispielhaft verlinkten objekte an [Object.toJSON]
zu verfuettern.
liefe Dein algorithmus fehlerfrei, genuegten dessen ergebnisse aber weder den
anforderungen an JSON-strings noch kaemen sie in die naehe der ergebnisse
eines in gecko-browsern nativ implementierte »obj.toSource()« - alles andere
waere nicht akzeptabel oder beduerfte einer eigenen spezifikation.
so long - peterS. - pseliger@gmx.net
Hallo,
habt Ihr Euch, bevor Ihr jeder fuer sich ueber das ziel hinausgeschossen seid,
auch nur einmal die muehe gemacht, die nicht sonderlich umfangreiche und
auch keineswegs misszudeutende JSON-spezifikation ueberhaupt zu lesen?
Hab ich, und ich habe entschieden, das so einfach wie möglich zu machen, weil es bis jetzt noch keine Probleme gab
|| alles was in vermeintlichen JSON-notationen an mehr neben [Object]- und
[Array]- objekten, [string]-, [number]-, und boolean-werten sowie [null]
enthalten ist, laesst diese notationen genau das sein, was sie sind:
native JavaScript-objekt_LITERAL_-notationen.
ja, und, wir etwa nicht?
@Flo(levu):
Deine von Dir gepostete bildungsvorschrift wirft einen [TypeError], sobald ich
versuche, eins der von Joachim beispielhaft verlinkten objekte an [Object.toJSON]
zu verfuettern.
Oh, muss ich mal gucken, woran das liegt :(
liefe Dein algorithmus fehlerfrei, genuegten dessen ergebnisse aber weder den anforderungen an JSON-strings noch kaemen sie in die naehe der ergebnisse eines in gecko-browsern nativ implementierte »obj.toSource()« - alles andere waere nicht akzeptabel oder beduerfte einer eigenen spezifikation.
hmm, ich sehe ein, dass es sehr kurz und unvollständig ist. Dafür funktioniert es aber eben nicht nur in gecko :)
Ich werde mir mal ein Beispiel angucken und überprüfen, wie es dort gemacht wurde...
mfg, Flo
Hallo,
Deine von Dir gepostete bildungsvorschrift wirft einen [TypeError], sobald ich versuche, eins der von Joachim beispielhaft verlinkten objekte an [Object.toJSON] zu verfuettern.
Nein, raus kommt:
"{'foo': 'bar', 'lala': {'zak': {'0': 'dd', '1': 'aa', '2': {'xxl': 'start,"ccc"'}}, 'zuk': {'0': 'fgh', '1': true}, 'zik': {'batz': {'0': 'x', '1': {'ab': 'u'}}, 'bum': {'0': 'xxxx', '1': 'uuuu'}}}, 'post': {'papst': {'chefe': {'fux': {'0': 1, '1': 2, '2': 3}}}, 'papa': {'kind': true}}, '0': {'0': 1, '1': 2, '2': 3}}"
mfg, Flo
Hallo,
Bearbeiten muss es geben!!!
Natürlich so: (Firebug maskiert " nicht automatisch)
"{'foo': 'bar', 'lala': {'zak': {'0': 'dd', '1': 'aa', '2': {'xxl': 'start,\"ccc\"'}}, 'zuk': {'0': 'fgh', '1': true}, 'zik': {'batz': {'0': 'x', '1': {'ab': 'u'}}, 'bum': {'0': 'xxxx', '1': 'uuuu'}}}, 'post': {'papst': {'chefe': {'fux': {'0': 1, '1': 2, '2': 3}}}, 'papa': {'kind': true}}, '0': {'0': 1, '1': 2, '2': 3}}"
mfg, Flo
Hi,
Deine von Dir gepostete bildungsvorschrift wirft einen [TypeError], sobald ich versuche, eins der von Joachim beispielhaft verlinkten objekte an [Object.toJSON] zu verfuettern.
hm, das kann ich nicht bestätigen. Bei mir läuft die Sache korrekt - mit besagtem Testobjekt, siehe
http://www.wendenburg.de/test/create_json/create_json_from_obj5.html
Gruesse, Joachim