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 混合适配器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章