たとえば、私のjson文字列は次のようになります:
{
"v1" : [],
"v2": 2,
"v3": f()
}
これをデコードする必要があるコンテキストには定義がf
ありf()
、そのコンテキストで正しい答えが得られます(デバッガーでチェック)。しかしJSON.parse(jsonstring)
、私に与えますUnexpected token
。eval
エラーも出ます。私は何をすべきか?
ここで例を見てください
たとえば、私のjson文字列は次のようになります:
{
"v1" : [],
"v2": 2,
"v3": f()
}
これをデコードする必要があるコンテキストには定義がf
ありf()
、そのコンテキストで正しい答えが得られます(デバッガーでチェック)。しかしJSON.parse(jsonstring)
、私に与えますUnexpected token
。eval
エラーも出ます。私は何をすべきか?
ここで例を見てください
うまくいかない理由
JSON の定義を見てください。関数呼び出しを含めることはできません。
考えられる回避策
1 つの方法は、このようなことを行い、呼び出したい関数の文字列を返すことです。
{
"v1" : [],
"v2": 2,
"v3": "f"
}
アクセスする必要がある場合は、関数を呼び出すことができます。
var myJSON = JSON.parse(jsonstring);
var myFunctionResult = window[myJSON.v3](); //works if global variable
他のオプションは、コードの動作方法を変更し、非同期スクリプト呼び出しを行うことです [jQuery は、 JSONP のようgetScript
に通常の JavaScriptcreateElement("script")
で、コールバックを使用します。appendChild()
JSON 文字列に関数を含めることはできません。
JSON は JavaScript オブジェクトから派生したものですが、JavaScript オブジェクトと同じではありません。結局のところ、それは文字列です。
JSON でコールバックや関数呼び出しを使用しないでください (有効な JSON ではありません。安全ではなく、ばかげています。何らかの方法で機能させる場合、最後の 2 つのことです)。スクリプトでそれを行う方法は常にあります。
編集: JSON から関数を呼び出す必要はありません。「製図板」に戻って、このパターンを使用しないようにアプリを設計してください。