Javascript 尝试从API获取数据时遇到问号
我正在使用node webkit构建一个应用程序,每当我的国家出现警报时(我们目前处于战争中)都会提醒我。有一个网站提供包含当前报警信息的JSON文件Javascript 尝试从API获取数据时遇到问号,javascript,json,node.js,Javascript,Json,Node.js,我正在使用node webkit构建一个应用程序,每当我的国家出现警报时(我们目前处于战争中)都会提醒我。有一个网站提供包含当前报警信息的JSON文件当我尝试访问该页面并检查是否存在警报时,结果是出现了许多问号。我不能使用它,当我尝试JSON.parse数据时,它说它不能解析问号。我该怎么办 url: "http://www.oref.org.il/WarningMessages/alerts.json", checkAlert: function(callback) { request
当我尝试访问该页面并检查是否存在警报时,结果是出现了许多问号。我不能使用它,当我尝试JSON.parse数据时,它说它不能解析问号。我该怎么办
url: "http://www.oref.org.il/WarningMessages/alerts.json",
checkAlert: function(callback) {
request({
uri: this.url,
json: true,
encoding: 'utf-8'
}, function(err, res, json) {
if (err)
return console.log(err);
json = JSON.parse(json);
var data = json.data;
console.log('just checked. json.data: ' + data);
if (data.length != 0) // if array is not empty
callback(true);
else
callback(false);
});
}
以下是该文件的外观:
{
"id" : "1405751634717",
"title" : "something in hebrew ",
"data" : []
}
非常感谢 看看这里:
首先要完全确定您的JSON文件实际上是用UTF-8编码的
您可能需要检查服务器是如何为这些JSON提供服务的,以及它们有哪些编码
另请检查此链接:
快速概述:
“V8当前仅接受BMP中的字符作为输入,使用UCS-2
作为内部表示(与JavaScript的表示相同
基本上,这意味着JavaScript使用UCS-2
内部字符编码,严格来说是16位格式,
这意味着它只能支持前65536
Unicode字符的代码点。任何落在外面的字符
在从UTF-8到UTF-8的转换过程中,该范围显然被截断
UCS-2,破坏字符流。就我而言(和其他许多人一样
我在研究中发现)当系统试图
将这些字符串序列化/反序列化为JSON对象。在
转换后,您可能会得到无效的字符序列
UTF-8。当浏览器看到这些断开的字符串出现时,他们会立即
中途中断连接,显然是一种安全措施。(一)
有点理解但很难解释,
因为这些关于字符编码的讨论让我头疼)
该API返回一个用
UTF-16-LE
编码的JSON响应,因此您必须告诉request
使用该编码
但是,由于您试图查询Pikud Haoref的警报API,请查看npm上的Pikud Haoref API
,为您完成以下任务:
(免责声明:我创建了此软件包)谢谢!但是,如果我甚至不想要真正的希伯来文呢?我只想检查数组是否为空。我可以交替解析JSON吗?对于这一点,代码上的问题是条件:(data.length!=0)->JavaScript中的空数组为true,因此您的测试是错误的,请尝试通过这种方式检查(data.length!=0),这样,您实际上是在请求数据的length属性。您正在执行以下操作,请求data.length,这对于数组总是正确的,JS会自动进行转换和比较1!=0,这是错误的。这就是它在检查数组是否为空时失败的原因。