JSON.parse() 在 Worklight 混合适配器中不起作用

Posted

技术标签:

【中文标题】JSON.parse() 在 Worklight 混合适配器中不起作用【英文标题】:JSON.parse() is not working in Worklight Hybrid Adapter 【发布时间】:2013-04-02 12:29:58 【问题描述】:

我正在尝试使用适配器进行推送通知。我按照此IBM Worklight Developer site 中为推送通知定义的所有步骤,制作了一个项目及其工作。现在我想进一步向特定设备发送通知。对于此工作灯,请提供一个 getDeviceSubscriptions() 方法,该方法返回 JSON 数组,其中包含每个订阅设备的对象数。

deviceSubscriptions = userSubscription.getDeviceSubscriptions() ;

JSON 包括:

[

“平台”:“谷歌”,

"eventSourceId":"PushAdapter.PushEventSource",

"别名":"myPush",

“令牌”:“”,

"userAgent":"",

“设备”:“”,

"applicationId":"",

“选项”:

]

现在我想使用 JSON 中的数据来获取设备和令牌。现在为此我使用 JSON.stringify(deviceSubscriptions) 这个方法将 deviceSubscriptions 转换为字符串。但我希望我可以直接访问 JSON 数组中的令牌和设备,为此我使用了 JSON.parse(deviceSubscriptions) 但这给出了错误:

“Ecma 错误:TypeError:找不到对象的默认值。(C%3A%5Cworkspace%5CFINAL%5Cadapters%5CPush/Push-impl.js#43)”

第 43 行是:

JSON.parse(deviceSubscriptions)

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

Worklight 适配器的 javascript 代码使用 Mozilla Rhino 在 Worklight Server 上运行。 Rhino 是完全用 Java 编写的 JavaScript 的开源实现。您可能无法访问客户端上运行的 JavaScript 引擎可以访问的所有内容。

似乎 JSON 或 JSON.parse 都未定义。尝试将以下库添加到您的 Worklight Adapter [name]-impl.js 文件:

json2.js:这个文件在全局对象中创建一个 JSON 属性,如果有 还不是一个,将其值设置为包含 stringify 的对象 方法和解析方法。 parse 方法使用 eval 方法来做 解析,用几个正则表达式保护它来防御 意外的代码执行危险。在当前的浏览器上,这个文件什么都不做, 更喜欢内置的 JSON 对象。

Source.

【讨论】:

感谢您的大力帮助。现在我将 json2.js 作为 json-impl.js 添加到我的适配器文件夹中,但是每当我添加它并调用或部署适配器时,出现以下错误“适配器部署失败程序”提交通知' 未在适配器的 JavaScript 文件中实现。" 当我从适配器文件夹中删除这个 js 文件并部署适配器时,它会给出消息“成功部署” 尝试将 json2.js 的内容复制/粘贴到您现有的 [name]-impl.js 文件中(您需要在其中使用 JSON.parse),而不是创建新文件。

以上是关于JSON.parse() 在 Worklight 混合适配器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

秒懂JSON.parse()与JSON.stringify()的区别

JSON.parse 没有预期的行为

如何在笑话测试中模拟 json.parse()

JSON.parse,我做错了啥?

JSON.parse:意外字符

“JSON.parse”和“JSON.stringify”有啥区别?