gpt4 book ai didi

jQuery 解析 JSON 错误

转载 作者:行者123 更新时间:2023-12-01 02:59:34 27 4
gpt4 key购买 nike

我正在尝试解析从 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}');

Firebug中出现的错误是:

SyntaxError: JSON.parse: expected ',' or '}' after property value in object

由于我一生都看不到任何丢失的 ',' 或 '}' 符号(除非 ruby​​ to_json 方法被破坏,否则不应该有),我假设这是一个转义问题。但是我需要转义哪些字符来修复它?

编辑:

我的后端是 Sinatra (Ruby),使用 DataMapper 作为 ORM。 JSON 字符串在 Controller 中生成为 @data = model.to_json,并在 View 中作为 $.parseJSON('#{@data}') 进行处理>.

最佳答案

您的 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}');

我怀疑您使用类似以下伪代码的内容生成 Javascript 代码:

print "var data = $.parseJSON('" + json_string + "')"

简单地将字符串包裹在引号内不足以足以确保其字面值在生成的 Javascript 代码中保持不变。为了保护字符串免受此类特殊字符问题的影响,通常将其包装在额外的 JSON 编码中就足够了,而不是用单引号包装:

print "var data = $.parseJSON(" + json_encode(json_string) + ")"

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

print "var data = " + json_string

关于jQuery 解析 JSON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12707406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com