- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我已经转义了控制字符,并将经过验证的 JSON 提供给 JSON.parse 和 jQuery.parseJSON。两者都给出相同的结果。
获取错误消息 “Unexpected token $”
:
$(function(){
try{
$.parseJSON('"\\\\\"$\\\\\"#,##0"');
} catch (exception) {
alert(exception.message);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
感谢您查看此问题。
最佳答案
这里发生的事情是对字符串应用了两个级别的反斜杠删除。第一个是由浏览器的 JavaScript 引擎在解析单引号字符串时完成的。在 JavaScript 中,单引号字符串和双引号字符串是完全等价的(除了单引号必须在单引号字符串和双引号必须 在双引号字符串中进行反斜杠转义);两种类型的字符串都采用反斜杠转义代码,例如 \\
用于反斜杠,\'
用于单引号(冗余但在双引号字符串中被接受),以及 \"
用于双引号(冗余但在单引号字符串中被接受)。
在您的 JavaScript 单引号字符串字面量中,您有多个此类实例,它们是有效的 JSON 双引号字符串:
"\\\\\"$\\\\\"#,##0"
浏览器解析后,该字符串恰好包含以下字符(包括外部双引号,因为它们包含在单引号字符串中所以未被删除):
"\\"$\\"#,##0"
您可以看到,每对连续的反斜杠都变成了单个文字反斜杠,并且奇数反斜杠后跟双引号的两种情况都变成了文字双引号。
That 是作为参数传递给 $.parseJSON
的文本,这是第二级反斜杠删除发生的时间。在上述文本的 JSON 解析过程中,前导双引号表示 JSON 字符串文字的开始,然后这对反斜杠被解释为单个文字反斜杠,然后紧随其后的双引号终止 JSON 字符串文字。后面的内容(美元、反斜杠、反斜杠等)是无效的 JSON 语法。
问题是您在 JavaScript 单引号字符串文字中嵌入了有效的 JSON,尽管它恰好是侥幸的有效 JavaScript 语法(如果 不会 JSON 包含单引号,或者如果您尝试使用双引号来分隔 JavaScript 字符串文字),在被浏览器的 JavaScript 引擎解析后不再包含有效的 JSON。
要解决此问题,您必须手动转义 JSON 内容以正确嵌入 JavaScript 字符串文字,或者独立于 JavaScript 源加载它,例如来自平面文件。
这里演示了如何使用最新的示例代码解决问题:
$(function() {
try {
alert($.parseJSON('{"key":"\\\\\\\\\\"$\\\\\\\\\\"#,##0"}').key); // works
alert($.parseJSON('{"key":"\\\\\"$\\\\\"#,##0"}').key); // doesn't work
} catch (exception) {
alert(exception.message);
}
});
http://jsfiddle.net/814uw638/2/
由于 JavaScript 有一个简单的转义方案(例如参见 http://blogs.learnnowonline.com/2012/07/19/escape-sequences-in-string-literals-using-javascript/ ),在一般情况下实际上很容易解决这个问题。你只需要提前决定你将如何在 JavaScript 中引用字符串(单引号是个好主意,因为 JSON 中的字符串总是双引号),然后当你准备 JavaScript 源代码时,只需添加一个嵌入 JSON 中每个单引号和每个反斜杠之前的反斜杠。这应该保证它完全有效,无论确切的 JSON 内容如何(当然,前提是它是有效的 JSON)。
关于javascript - JSON.parse 在有效 Json 上失败。已转义控制字符。如果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008852/
我发现在使用parse-node包时,不能再使用Parse.Cloud.httpRequest了。我也知道 Parse 的 Image 对象将不可用。 到目前为止,我已经能够用原生的替换一些 Pars
关闭。这个问题是opinion-based 。目前不接受答案。 已关闭 9 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我有一个函
开源 Parse Server 是否包含用于配置新 Parse 实例的 Schema API?我试图消除手动创建应用程序的需要。 这是通过 Parse.com 提供的架构 API http://blo
我想从我的云代码发出一个 http 请求,该请求在我的客户端被调用。 最佳答案 一开始我发现这有点令人困惑,所以希望这会有所帮助。 在您的云代码中main.js Parse.Cloud.define(
这部分代码应该读入两个或更多数字(省略主 io 函数),然后是一个“+”来给出总和。使用有理数是因为稍后我将进行乘法和其他此类操作。 data Expression = Number Rationa
我似乎找不到任何关于此的官方信息:Does Parse.Config work on Parse Server?它曾经在 Parse.com 上工作,但是当我尝试迁移到 Parse.Server 时,
我正在尝试找到使用 Parse.com 添加密码要求的最佳程序。似乎最简单的方法是在保存用户数据之前使用云功能执行。我唯一的警告是,只有当密码与数据库中存储的密码不同或者用户不存在于数据库中时,我才想
我是 android 开发、应用程序开发和一般开发的初学者,我正在尝试为我的 android 应用程序设置后端数据库。我决定使用一个名为 back4app 的服务,以便获得更加用户友好的数据库体验,因
我目前正在尝试将 Facebook 登录功能添加到我的应用程序。 根据Android文档,当我添加 compile 'com.parse:parsefacebookutils-v4-android:1
我正在尝试使用 Rebol 2/3 从字符串中解析货币值,货币值的格式为: 10,50 欧元或 10,50 欧元 我在浏览了所有 PARSE 文档后想出了这段代码,我可以在 Red 中找到它,但在 R
代码: DateTimeFormat dateFormat = DateTimeFormat .getFormat("EEE MMM dd HH:mm:ss zzz y
我不再在 Parse 上看到用于导入 JSON 或 CSV 文件的导入按钮。他们是否将其移动到某个地方,或者不再可能导入这些文件类型? 最佳答案 官方原因是这样的: “[导入类按钮] 几天前被删除,因
我正在使用 PHP 从我的服务器检索一些数据。我想在 javascript 应用程序中使用这些数据,所以我正在做这样的事情: var polylines = ; $polylines 只是一个 PHP
我已经开始使用 .NET 4 System.Numerics.BigInteger Structure我遇到了一个问题。 我正在尝试解析一个包含无符号(正数)的十六进制数字的字符串。我得到一个负数。
我正在使用 PHP 从我的服务器检索一些数据。我想在 javascript 应用程序中使用这些数据,所以我正在做这样的事情: var polylines = ; $polylines 只是一个 PHP
在 Go 中,尝试将字符串转换为 time.Time 时,使用时间包的 Parse 方法不会返回预期结果。似乎问题出在时区。我想更改为 ISO 8601 结合 UTC 日期和时间。 package m
我正在尝试将此字符串模式 "4-JAN-12 9:30:14" 解析为 time.Time。 尝试了 time.Parse("2-JAN-06 15:04:05", inputString) 和许多其
从云代码和解析开始。使用this . 如何删除所有 Parse 项目以便开始创建新项目?我收到以下错误: “您想要创建一个新应用程序,还是将 Cloud Code 添加到现有应用程序中?输入“(n)e
我在解析云代码时有这个功能: Parse.Cloud.define("testfunction", function(request, response) { var username = r
最近,我在 parse.com 上做了一些测试。我现在面临在后台作业中使用 Parse.Object.saveAll 的问题。 从 parse.com 的文档来看,后台作业可以运行 15 分钟。我现在
我是一名优秀的程序员,十分优秀!