我正在尝试以下(下面),但是当我想要包装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
答案 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);