解析有效JSON字符串时遇到问题
Facing issue while parsing valid JSON string
如何解析:
JSON.stringify({"a":JSON.stringify({"Max":"2"})});
// prints - {"a":"{'"Max'":'"2'"}"}
JSON.parse(('{"a":"{'"Max'":'"2'"}"}'))
// gives error - unexpected token M
我到底做错了什么?
更新1:Pranav的解决方案很有效。但不知何故,我无法解析以下字符串:
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''"}"}'))
)
UPDATE:如果你想让一个字符串到一个有效的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));
基本上在JSON中有一个't
。此字符无效。
用右转义制表符替换后,您可以解析字符串。
var s = "{'"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'":{}}";
s = s.replace(/'t/g, '''''t');
console.log(JSON.parse(s));
console.log(s);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我认为你误解了JSON的概念以及PARSE和STRINGIFY的使用。你不要 stringify一个字符串,因为你不要解析JSON对象。
在您的示例中,这正是您正在做的,您正在对字符串进行字符串化(我猜您的意思是解析它)。
:
aaa = JSON.parse({"a":JSON.stringify({"Max":"2"})});
将给aaa
分配一个JSON对象,
console.log(JSON.strigify(aaa)) ;
将打印JSON的字符串版本
相关文章:
- 将PHP变量传递给jQuery时遇到问题
- 将jQuery转换为用户脚本的普通Javascript时遇到问题
- 将子文档推送到父数组时遇到问题
- JQuery FullCalendar在从ajax成功调用rerenderEvents时遇到问题
- 在将javascript附加到我的html中时遇到问题
- 为什么我在以编程方式打开窗口时遇到问题
- 在将缩略图链接到模态时遇到问题
- 使用 ng 模型获取数据时遇到问题
- 是否有其他人在设计Twitter Typeahead时遇到问题'的搜索栏
- 使用jquery进行整数比较时遇到问题
- 使用PhantomJS下载动态web内容时遇到问题
- 设置RequireJS时遇到问题
- 让Javascript在SharePoint 2010上运行时遇到问题
- I'我在react.js中编写for循环时遇到问题
- 通过jQuery获取上传的文件名时遇到问题
- 我在启动我的节点时遇到问题.js IRC 机器人
- Ruby on Rails 4:在 Rails Web 应用程序中添加 Javascript 文件时遇到问题
- 从谷歌地图自定义控件打开离子模态时遇到问题
- 在使用 YAML 和 Google App Engine 时遇到问题
- 在 Chrome 扩展程序中将鼠标悬停在广告上使用时遇到问题