OpenACS (or Tcl) does not generate BOMs, BOMs are not related to json and could appear in any kind of UTF-8 text. The Unicode Standard permits the BOM in UTF-8, but does not require or recommend its use . Probably do you get the json string from some external source (maybe an editor). You should either tell the source, not to generate the BOM, or you should strip it... what you are doing anyhow.
PS: BOM stands for Byte Order Mark.