jQuery parseJSON错误

Ric*_*kes 2 jquery json

我正在尝试解析从我的Sinatra/DataMapper后端提供的JSON字符串,但是收到了错误$.parseJSON.违规行是:

var data = $.parseJSON('{"id":1249,"ssid":"asdf","mac_addr":"12:34:56:78:90:12","description":"<a href=\"http://www.google.com\">Google</a>","gps_lat":"53.345036547354","gps_lng":"-6.2576787407226675","location":"","authentication_method":"WPA2-PSK","password":"","xml_id":"default","access_network_area_id":37}');
Run Code Online (Sandbox Code Playgroud)

Firebug中出现的错误是:

SyntaxError: JSON.parse: expected ',' or '}' after property value in object
Run Code Online (Sandbox Code Playgroud)

因为我不能在我的生活中看到任何遗漏的','或'}'符号(除非ruby to_json方法被破坏,否则不应该存在),我假设这是一个逃避问题.但是我需要逃脱哪些角色来修复它?

编辑:

我的后端是Sinatra(Ruby),DataMapper作为ORM.JSON字符串在控制器中生成@data = model.to_json,并在视图中处理$.parseJSON('#{@data}').

lan*_*nzz 5

您的JSON字符串未被充分转义 - 在键内容中的引号之前有单个反斜杠description; 由于反斜杠是Javascript字符串中的特殊符号,因此\"会在"实际字符串中生成未转义的字符.这些反斜杠需要加倍才能在字符串中保留为文字字符,使其成为有效的JSON表示.

此更正的JSON字符串按预期工作:

var data = $.parseJSON('{"id":1249,"ssid":"asdf","mac_addr":"12:34:56:78:90:12","description":"<a href=\\"http://www.google.com\\">Google</a>","gps_lat":"53.345036547354","gps_lng":"-6.2576787407226675","location":"","authentication_method":"WPA2-PSK","password":"","xml_id":"default","access_network_area_id":37}');
Run Code Online (Sandbox Code Playgroud)

我怀疑你用这样的伪代码生成你的Javascript代码:

print "var data = $.parseJSON('" + json_string + "')"
Run Code Online (Sandbox Code Playgroud)

引号内的字符串的简单的包装是足够的,以确保其字面值保持在生成的Javascript代码相同.为了保护字符串免受此类特殊字符问题的影响,通常只需将其包装在一个额外的JSON编码中,而不是用单引号括起来:

print "var data = $.parseJSON(" + json_encode(json_string) + ")"
Run Code Online (Sandbox Code Playgroud)

由于JSON编码生成有效的Javascript数据结构,因此对简单字符串进行JSON编码将生成正确引用的Javascript字符串.但是,公平地说,如果您的JSON来自可信来源,您可以完全跳过中间JSON解码步骤:

print "var data = " + json_string
Run Code Online (Sandbox Code Playgroud)