“JSON.parse(str)”返回“Unexpected token c”,但str是一个字符串

时间:2015-03-10 16:24:59

标签: javascript html json

我正在尝试以下(下面),但是当我想要包装JSON.parse然后我得到一个错误Unexpected Token C.我在网上检查了类似的问题并且它说输入已经是一个对象,因此抛出此错误的原因。但是,我尝试了typeof str并且它返回了String。还通过piecesString [0] .col访问它不起作用 - 因此我的输入不是一个对象,而是一个字符串。出了什么问题?

function generatePieces(nbPieces) {
                    console.log("** nbPieces: " + nbPieces)
                    var piecesString = "";
                    var piecesArray = [];
                    var colIter = 0;
                    var rowIter = 0;

                    for (var i = 0; i <= (nbPieces*nbPieces-1); i++) {

                        piecesString = piecesString + "{col:" + colIter + ",row:" + rowIter + "},"

                        colIter = colIter + 1;
                        if (colIter == (nbPieces)) {
                            //console.log("colIter = nbPieces")
                            colIter = 0;
                            rowIter = rowIter +1;
                        }

                    }

                    piecesString = piecesString.substring(0, piecesString.length - 1);
                    piecesString = "[" + piecesString + "]"

                    piecesString = '' + piecesString

                    console.log(piecesString)
                    piecesArray = JSON.parse(piecesString);

                    //console.log(piecesString)


                }; // end generate pieces

1 个答案:

答案 0 :(得分:4)

str是一个JS字符串,但不是JSON文本的字符串表示。

JSON中的属性名称必须是字符串,而不是标识符。

{ col: 123 }是一个有效的JavaScript对象文字,但是无效的JSON。

{ "col": 123 }两者都可以。


不要尝试通过将字符串混合在一起来构建JSON。这是值得的更麻烦。使用当时使用的任何编程语言构建数据结构(在本例中为JavaScript),然后通过JSON序列化程序传递它。

var pieces = [];
for (var i = 0; i <= (nbPieces*nbPieces-1); i++) {
    var piece = { col: colIter, row: rowIter };
    pieces.push(piece);
}
var json_text = JSON.stringify(pieces);