2つのjsonファイルをロードしてマージしたい古典的なasp(vbscript)ページがあります(一方を他方に再帰的に適用します)。
<script language="JScript" runat="server">
function MergeJson(dest, src) {
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
try {
if ( src[prop].constructor==Object ) {
dest[prop] = MergeJson(dest[prop], src[prop]); // recurse
} else {
dest[prop] = src[prop]; // update
}
} catch(e) {
dest[prop] = src[prop]; // create
}
}
}
return dest;
}
</script>
上記の関数は、クライアント側 (Chrome など) で実行すると正しく実行されます。しかし、同じ関数をサーバー側に追加すると失敗します。私の呼び出しコードは VBScript であり、次のようになります。
Sub GetJSON(byval path, byref oJSON)
Dim str : str = GetFileString(Server.MapPath(path), "")
If str = "" Then str = "{}" ' empty object
Set oJSON = JSON.parse(join(array(str))) ' Douglas Crockford's json2.js
End Sub
Dim DefualtSettings : Call GetJSON("/defaults/settings.json", DefaultSettings)
Dim MySettings : Call GetJSON("/my/settings.json", MySettings)
Dim newSettings : newSettings = MergeJson(DefaultSettings, Settings)
response.write JSON.stringify(newSettings, null, 4) ' see it
サーバー側コードへの移行に耐えられなかった理由はよくわかりません。私はjsonを適切にロードしていること、そしてそれがそのように解析できること(したがって有効であること)を確認し、本質的に同じクライアント側の実行が正常に機能していることを確認しました...コードをデバッグする方法がわかりませんサーバー側では、そのボックスに開発ツールはありません。IIS 7.5 を搭載した標準の Windows サーバーです。