サクラエディタのマクロで JSON を整形する

JSON整形をブラウザでオンラインツールなどで行うなら、過去に紹介した
JSON Editor の紹介 - Oboe吹きプログラマの黙示録
を使えば良いが、
サクラエディタのマクロに登録しておくものがある。
しかし、ネットで紹介されてるマクロは、複数の項目 or 値がある時、
区切りのカンマ文字の前で改行している。カンマ区切りの後で改行してほしい。
そこで、ちょっと手を加えてあげればよい。
登録するマクロを次のようにする。

jsonpretty.js

var cnt = GetLineCount(0);
var textAll = "";
for(var i = 1; i <= cnt; i++){
   var str = GetLineStr(i).replace(/\n/,"").replace(/\r\n/,"");
   textAll += str;
}
var editJson = "";
var innerFlg = false;
var intentLv = 0;
var quoteType = [];
var blockType = [];
var preChr = "";
var indent = "\t";   // インデント
var rtnChr = "\r\n"; // 改行
for(var i=0; i < textAll.length; i++){
   var prefix = "";
   var suffix = "";
   var rtn = "";
   var c = textAll.substring(i, i + 1);
   if (!innerFlg){
      if (c == " "){
         continue;
      }
      if (c == "\"" || c == "'"){
         innerFlg = true;
         quoteType[quoteType.length] = c;
         // JSON または 配列の1つ目の要素の時はスペース1個を追加
         var chkText = editJson.replace(/( |\t|\r\n|\n)/g, "");
         if (chkText.length > 0){
            var preChar = chkText.substring(chkText.length - 1, chkText.length);
         }
      }else{
         if (c == "{" || c == "["){
            suffix = "";
            intentLv = intentLv + 1;
            blockType[blockType.length] = c;
            for(var j = 0; j < intentLv; j++){
               suffix = suffix + indent;
            }
            rtn = rtnChr;
         }
         if (c == "}" || c == "]"){
            prefix = rtnChr;
            intentLv = intentLv - 1;
            blockType.pop(1);
         }
         if (c == ","){
            rtn = rtnChr;
            for(var j = 0; j < intentLv; j++){
               suffix = suffix + indent;
            }
         }
         if (c == ":"){
            c = " : ";
         }
      }
   }else{
      if (quoteType.length > 0 && c == quoteType[quoteType.length - 1]){
         innerFlg = false;
      }
   }
   if (prefix != ""){
      for(var j=0; j < intentLv; j++){
         prefix = prefix + indent;
      }
   }
   var line = prefix + c + rtn + suffix;
   if (preChr == "" && line.substring(0, 1) == rtnChr){
      line = line.substring(1);
   }
   editJson = editJson + line;
   preChr = line.substring(line.length - 1, line.length);
}
SelectAll(0);
InsText(editJson + rtnChr);

これをマクロとして登録すれば良い。
サクラエディタのマクロの登録は、下記を参考に。。。
サクラエディタで snakecase ⇔ camelcase - Oboe吹きプログラマの黙示録