Javascript:使用额外的大括号解析JSON

时间:2015-08-26 21:56:59

标签: javascript json node.js

我有这个JSON对象:

var dataObj = { data: '\n{ sizeMap:{\nxSizes: "REGULAR|SMALL", \ncurrItemId: "",\ncurrItemSize: "",\nmanufacturerName:"Rapid",\npartNumber: "726G", \nsuitStyle: "R",\nhasSC: "",\nhasInseam:""\n}\n}',type: 'text',next: null,prev: null };

我正在尝试使用以下内容读取sizeMap值中的dataObj.data对象:

 console.log(dataObj.data.sizeMap);

但它是undefined。我尝试了JSON.parse(dataObj.data)错误:

{ sizeMap:{
  ^
  SyntaxError: Unexpected token s

console.log(dataObj.data)的输出是:

{ sizeMap:{
  xSizes: "REGULAR|SMALL",
  currItemId: "",
  currItemSize: "",
  manufacturerName:"Rapid",
  partNumber: "726G",
  suitStyle: "R",
  hasSC: "",
  hasInseam:""
  }
}

所以有额外的括号包装JSON?注意:这是在Node.js

1 个答案:

答案 0 :(得分:2)

那不是JSON,它是一个JavaScript对象。 JSON是一种表示数据的文本格式。

对象内的字符串data也不是JSON。要成为有效的JSON,它需要在所有属性名称周围加上引号:

{
  "sizeMap": {
    "xSizes": "REGULAR|SMALL",
    "currItemId": "",
    "currItemSize": "",
    "manufacturerName":"Rapid",
    "partNumber": "726G",
    "suitStyle": "R",
    "hasSC": "",
    "hasInseam":""
  }
}

请注意,括号实际应该在那里,这不是问题。

该字符串可用作JavaScript,因此您可以使用eval将其转换为对象:

eval("(" + dataObj.data + ")").sizeMap

当然,只要您使用eval,通常的预习就会适用。当它执行代码时,你必须确保没有人可以在字符串中放置任何有害的东西。