WSHでJSONファイルを出力する

投稿日:

WSH,JScriptでは、標準でJSONを使用する事が出来ません。
検索すればライブラリやhtmlfileからJSONを使用する方法がみつかるかと思います。
読み込み関連はほぼ問題ないのですが、文字列化する際にhtmlfileを使用して困ったのでメモとして残します。

JSONを使用する方法

json3.jsを使用する

ライブラリなので簡単に使用可能です。
下記から json3.js をダウンロードし読み込めば、使用可能です。ここでは説明を省きます。

https://github.com/bestiejs/json3

htmlfileを使用する

JSONを読み込む際は、ライブラリをダウンロードしてくるのが面倒なので
昔からこの方法で行っていました。

var JSON = (function(){
    var htmlfile = new ActiveXObject('htmlfile');
    htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=11" />');
    return htmlfile.parentWindow.JSON;
})();

JSON.stringify() の違い

以下のオブジェクトをJSONとして出力したいと思います。

var sample = {
  "name" : "tarou",
  "item" : [
    "sword",
    "shield"
  ]
};

var jsonString = JSON.stringify(sample, undefined, "    ");
WScript.Echo(jsonString);

json3.js版の出力結果

{
    "name": "tarou",
    "item": [
        "sword",
        "shield"
    ]
}

どこにも違和感はありません。「そうだね。」という感じです。

htmlfileのJSON版の出力結果

{
    "name": "tarou",
    "item": {
        "0": "sword",
        "1": "shield",
        "length": 2
    },
    "constructor": {}
}

htmlfileのJSONでは、配列が添え字とともにオブジェクトとして出力されてしまいました。
以下のように、直接オブジェクトを渡しても同様です。

var jsonString = JSON.stringify({"name":"jiro","item":["axe"]}, undefined, "    ");

JSONファイルを出力する

ここまで書いておいて出力部分の説明は割愛します。
FileSystemObjectを利用し、テキストファイルとして出力すればOKです。

json3.jsとhtmlfileの使い分け

読み込みだけであれば、htmlfileを使う方が簡単です。
出力を行う際は、json3.js等のライブラリを使用した方が手っ取り早いです。

-JavaScript
-, ,

Copyright© 打ち聞かせ , 2020 All Rights Reserved Powered by STINGER.