A JSON text can be safely passed into JavaScript's eval() function (which compiles and executes a string) if all the characters not enclosed in strings are in the set of characters that form JSON tokens. This can be quickly determined in JavaScript with two regular expressions and calls to the test and replace methods.
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');
XMLのコストが高いのはわかるが (スコア:0)
Re: (スコア:0)
君のお腹が一杯になると、何か解決するの?
君の許容量が低いだけ?
恐らく、こういったのはシステム全体を含めた上手い解決策がでるまで、
何回でも何年でもやり続ける作業だと思います。
その解決策が使えるのは、せいぜい数年かもしれませんが…
Re: (スコア:2, すばらしい洞察)
YAML や JSON じゃだめなの? 正直,XDR とか ASN でもいいと思うんだけど…
XML 対 非XML という対比については分かりやすいのだけど,非 XML 同士では流派の
違いというか,審美観の問題になっている気がするです.
Re: (スコア:2, 参考になる)
Protocol buffers は拡張性を持った方法でデータを小さく高速に符号化するための方式です。 YAML [yaml.org] の目的は拡張性と可読性、 JSON [ietf.org] の目的は JavaScript の式として解釈できることで、どちらも目的が違います。端的な違いとして、 YAML や JSON では符号化後のデータがテキストですが、 protocol buffers では符号化後のデータがバイナリーです。
XDR とか ASN.1 とかは名前しか知りません。誰か protocol buffers がこれらと比較してどうなのか教えてください。
Re: (スコア:0, おもしろおかしい)
ホントにそれが目的?
そうか!JavaScript なら eval すればオブジェクトのデコードができるものね。
すごいねっ
Re: (スコア:2, すばらしい洞察)
はい。
まあ、 JavaScript はスクリプト言語なので、それくらいのことはできて当然というのが僕の印象ですが……。
Re: (スコア:0)
Re: (スコア:0)
設問が難問なほど、皮肉ってのは生きるものだよ?
eval (スコア:0)
汚染されている可能性がある.JavaScript で JSON データを扱う時でも,そのまま
eval するべきではない.実際,JavaScript で書かれた JSON パーサの実装が複数公開
されている.
JSON の魅力は誰かが「サニタイズ,サニタイズ」と叫んでる間にも,比較的セキュアな
簡易パーサが書けてしまうシンプルさにあると思う.
そのための適当な語彙をもったもので,親近性の高いものが JavaScript (ECMAScript)
だっわけで,JSON が JavaScript と文法上の互換性を持つのは,いわば目的ではなく
手段だったのではないか.
Re:eval (スコア:2, 興味深い)
信頼できないデータを eval するのはセキュリティー上問題があるというのはもちろんですが、僕の元コメント (#1382507) [srad.jp] に対する批判としては的外れです。 #1382507 では、リンクを張った RFC 4627 の 1 節にも書いてある「JSON の design goal は JavaScript のサブセットにすること」という事実を書いただけなので。ただ、 design goal を「目的」と訳したのは不適切だったかもしれません。
RFC 4627 の 1 節より:
また、 RFC 4627 の 6 節を読めば JSON の設計において eval を使って復号できることが意図されていることがわかります。
個人的な好みを書けば、僕は eval が嫌いなので、データが信頼できてもできなくても eval で復号するのは嫌いです。また、信頼できないデータについては、 6 節に書いてあるようなテストで JavaScript の将来のバージョンにわたって安全性が保証されるとも思えませんし。
Re: (スコア:0)
> ... JSON の目的は JavaScript の式として解釈できることで、どちらも目的が違います。
> JSON's design goals were for it to be minimal, portable, textual, and a subset of JavaScript.
JSON の目的として「minimal, portable, textual」という事実はなかったことに?
比較するときに,明らかに違うところだけに目を向けてもあまり意味がないのでは…
JSON が JavaScript のサブセットとなっていることは大きな特徴の一つだと思いますが,
他のシリアライズ手法と比較するときにそこだけ挙げるのは「的外れ」だと思いました.
Re:eval (スコア:1)
誤解です。 #1382507 [srad.jp] の書き方が少しわかりにくかったのは認めます。 #1382507 の
の部分を以下のように訂正すれば満足していただけるでしょうか。
でも、 #1382507 の当該部分が #1382417 [srad.jp] の
を受けて書かれていることは理解可能だと思うので、多少わかりにくかったという事実を前提としても、なぜこれほどまで誤解されるのか、よくわからなかったりします。