javascript - 解析有效 JSON 字符串时遇到问题

标签 javascript json parsing

如何解析:

JSON.stringify({"a":JSON.stringify({"Max":"2"})});
// prints - {"a":"{\"Max\":\"2\"}"}
JSON.parse(('{"a":"{\"Max\":\"2\"}"}'))
// gives error - unexpected token M

我到底做错了什么?

更新1: 普拉纳夫的解决方案效果很好。但不知怎的,我无法解析以下字符串:

var str = '{"a":"{\\"PRINT\\":{\\"Maximum Printing Resolution\\":\\"4800 (horizontal)*1 x 600 (vertical) dpi\\",\\"Recommended Printing Area\\":\\"Top margin: 31.6mm     Bottom margin: 29.2mm\\",\\"Paper Size\\":\\"A4\\",\\"Paper Handling\\":\\"A4, A5, B5,\\",\\"Paper Weight\\":\\"Plain Paper: 64-105 g/m2\\",\\"Ink End Sensor\\":\\"Dot count\\",\\"Print Head Alignment\\":\\"Manual\\"},\\"SCAN\\":{\\"Scanner Type\\":\\"Flatbad\\",\\"Scanning Method\\":\\"CIS\\",\\"Optical Resolution\\":\\"600 x 1200dpi\\",\\"Selectable Resolution\\":\\"25 - 19200dpi\\",\\"Scanning Bit Depth (Input/Output)\\":\\"16bit / 8bit\\",\\"Line Scanning Speed\\":\\"1.2ms/line (300dpi)\\",\\"Scanning Speed\\":\\"Approx. 19secs\\",\\"Maximum Document Size\\":\\"A4 / Letter (216 x 297mm)\\",\\"Compatible Media\\":\\"Size:  A4, Letter      Type:   Plain Paper\\",\\"Image Quality\\":\\"Draft, Standard\\"},\\"COPY\\":{\\"Copy Speed\\":\\"Approx. 30secs\\",\\"Multiple Copy\\":\\"1 - 21 pages\\"},\\"General\\":{\\"Brand\\":\\"Canon\\",\\"Model Name\\":\\"PIXMA E410\\",\\"Functionality\\":\\"Multi Function\\"},\\"Box Contents\\":{\\"In the Box\\":\\"Power Cable , USB Cable , Manual book with CD & Cartridge\\"},\\"Dimensions\\":{\\"Dimensions - L (Cms)\\":\\"426\\",\\"Dimensions - B (Cms)\\":\\"306\\",\\"Dimensions - H (Cms)\\":\\"145\\"},\\"Warranty Period\\":{\\"Warranty(Years)\\":\\"1\\"},\\"Additional Features\\":{},\\"Compatible Cartridge\\":{}}"}'

更新2:

具体代码:

var str = "{\"PRINT\":{\"Maximum Printing Resolution\":\"4800 (horizontal)*1 x 600 (vertical) dpi\",\"Recommended Printing Area\":\"Top margin: 31.6mm     Bottom margin: 29.2mm\",\"Paper Size\":\"A4\",\"Paper Handling\":\"A4, A5, B5,\",\"Paper Weight\":\"Plain Paper: 64-105 g/m2\",\"Ink End Sensor\":\"Dot count\",\"Print Head Alignment\":\"Manual\"},\"SCAN\":{\"Scanner Type\":\"Flatbad\",\"Scanning Method\":\"CIS\",\"Optical Resolution\":\"600 x 1200dpi\",\"Selectable Resolution\":\"25 - 19200dpi\",\"Scanning Bit Depth (Input/Output)\":\"16bit / 8bit\",\"Line Scanning Speed\":\"1.2ms/line (300dpi)\",\"Scanning Speed\":\"Approx. 19secs\",\"Maximum Document Size\":\"A4 / Letter (216 x 297mm)\",\"Compatible Media\":\"Size:\tA4, Letter      Type:\tPlain Paper\",\"Image Quality\":\"Draft, Standard\"},\"COPY\":{\"Copy Speed\":\"Approx. 30secs\",\"Multiple Copy\":\"1 - 21 pages\"},\"General\":{\"Brand\":\"Canon\",\"Model Name\":\"PIXMA E410\",\"Functionality\":\"Multi Function\"},\"Box Contents\":{\"In the Box\":\"Power Cable , USB Cable , Manual book with CD & Cartridge\"},\"Dimensions\":{\"Dimensions - L (Cms)\":\"426\",\"Dimensions - B (Cms)\":\"306\",\"Dimensions - H (Cms)\":\"145\"},\"Warranty Period\":{\"Warranty(Years)\":\"1\"},\"Additional Features\":{},\"Compatible Cartridge\":{}}";

str = '{"a":"'+str.replace(/"/g,'\\\"').replace(/\n/g,'')+'"}';

console.log(str);
console.log(JSON.parse(str));

最佳答案

您需要使用 \ 来转义 \ 本身,因为它在字符串中具有特殊含义。

JSON.parse(('{"a":"{\\"Max\\":\\"2\\"}"}'))

console.log(
  JSON.parse(('{"a":"{\\"Max\\":\\"2\\"}"}'))
)

<小时/>

更新:如果您想将字符串转换为有效的 JSON,请使用 JSON.stringify方法。

var str = "{\"PRINT\":{\"Maximum Printing Resolution\":\"4800 (horizontal)*1 x 600 (vertical) dpi\",\"Recommended Printing Area\":\"Top margin: 31.6mm     Bottom margin: 29.2mm\",\"Paper Size\":\"A4\",\"Paper Handling\":\"A4, A5, B5,\",\"Paper Weight\":\"Plain Paper: 64-105 g/m2\",\"Ink End Sensor\":\"Dot count\",\"Print Head Alignment\":\"Manual\"},\"SCAN\":{\"Scanner Type\":\"Flatbad\",\"Scanning Method\":\"CIS\",\"Optical Resolution\":\"600 x 1200dpi\",\"Selectable Resolution\":\"25 - 19200dpi\",\"Scanning Bit Depth (Input/Output)\":\"16bit / 8bit\",\"Line Scanning Speed\":\"1.2ms/line (300dpi)\",\"Scanning Speed\":\"Approx. 19secs\",\"Maximum Document Size\":\"A4 / Letter (216 x 297mm)\",\"Compatible Media\":\"Size:\tA4, Letter      Type:\tPlain Paper\",\"Image Quality\":\"Draft, Standard\"},\"COPY\":{\"Copy Speed\":\"Approx. 30secs\",\"Multiple Copy\":\"1 - 21 pages\"},\"General\":{\"Brand\":\"Canon\",\"Model Name\":\"PIXMA E410\",\"Functionality\":\"Multi Function\"},\"Box Contents\":{\"In the Box\":\"Power Cable , USB Cable , Manual book with CD & Cartridge\"},\"Dimensions\":{\"Dimensions - L (Cms)\":\"426\",\"Dimensions - B (Cms)\":\"306\",\"Dimensions - H (Cms)\":\"145\"},\"Warranty Period\":{\"Warranty(Years)\":\"1\"},\"Additional Features\":{},\"Compatible Cartridge\":{}}";

str = '{"a":'+JSON.stringify(str)+'}';

//console.log(str);
console.log(JSON.parse(str));

关于javascript - 解析有效 JSON 字符串时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40421908/

相关文章:

ios - 解析复杂 JSON 数组的有效方法

java - 使用Gson将自定义类的ArrayList序列化为JSON并通过HTTP发送数据

php - iOS 应用程序接收格式正确的 JSON,但仍然返回为不以数组或对象开头

parsing - AT+CMGL指令异常消息如何处理

javascript - ECMAScript 2015 类中不允许使用哪些代码?

javascript - styled-components:扩展样式和改变元素类型

javascript - 检查Javascript对象中是否存在key和value

android - 具有 Drupal 后端和登录的 native Android 应用程序

parsing - sed 从文件中提取多个可能的(?)值

javascript - JavaScript 上的 SOAP 服务调用在 Safari 中有效,但在 Chrome 或 Firefox 中无效