現在、自社サイトにて以下のスクリプトを流すと
var str = ['A', 'B']; var json_p = {}; var json = JSON.stringify(str); json_p = JSON.parse(json); console.log(typeof(json_p), json_p);
object ["A", "B"] // 求めてる結果
と、返ってきます。
ただ、とあるお客様のサイトだと
string ["A", "B"] // ちなみに、json変数の中身は "[\"A\",\"B\"]" となっておりました。
という結果が返ってきてしまいます。
※ ちなみに検証ブラウザは同じになります。
二重にJSON.parseをかければ取れてくるのですが、
最終手段かと思っております。
JSON.parseやJSON.stringifyの使い方が間違っているのでしょうか?
ご存知の方がいらっしゃいましたら、ご教授願います。
~追記~
お客様サイトと自社サイトのJSON.parse関数が異なるのに気づきました。
お客様サイトにはprototype.jsが入っておりました。
念のため追記します。※詳しくないので、調べてまいります
~追記2~
- 「JSON.stringifyが2重実行となっていた」と判断した理由
まず、原因として「JSON.stringifyが2重実行となっていた」と判断した理由ですが、
1.自社で作成している同一のJSファイルを複数サイトが読み、扱っている。
2.ただし、同現象が発生したのは1サイトのみだった
といったところです。
念のため、開発者モードで「上記スクリプト」を流しましたが、
対象のサイトのみで発生していた模様でした。
JSON.stringifyを実行した時点で、結果が異なっていたため、
「JSON関数群自体が書き換わっているのではないか」と思い
console.dir(JSON.parse);で見たところ、オブジェクトの中身が異なっていたため
JSON関数群が書き換わっているのでは?と思いました。
- 「prototype.js」を疑った理由
とりあえず、他のサイトとお客様サイトの違いを探した際に、一番最初に「prototype.js」に目を付けました。
(「歴史のあるJavaScriptの機能拡張できるモジュール」という認識を持っていたので)
手っ取り早く「prototyoe.js」が埋め込まれているサイトを探し、「上記スクリプト」を流すと
同じ現象が起きたため、「prototype.js」が原因か!と判断しました。(サイトがどれだったか見失いました・・・)
- 現状
結論としては prototype.js が問題ではなさそうです。(おそらく)
ご回答を新たに頂き、もう一度確認しました。
prototype.jsが埋め込まれているサイトを見つけ、「上記スクリプト」を流すと問題なくパースできました。
※ 念のため、お客様サイトでもう一度確認しましたが、パースできておりません。
~追記3~
追記②で書いていた、「検証に使用したサイト様」を発見しました。
こちらのページ になります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/08 09:59