我正在开发一个涉及从JSON形式的服务器中获取大量数据点的项目。例如,响应可能包含长度为1000+的数组。
为了帮助压缩某些数据,建议忽略没有可用信息的可用数据中的漏洞。该项目涉及股票价格的变化,股票不一定每周交易7天。假期和周末目前只用逗号表示,如下:
...
"C001":[
204.45,
201.99,
203.25,
202.98,
201.46,
,
,
194.34,
194.03,
190.81,
188.75,
189.31,
,
,
....
等等。
谢谢!
编辑::可能相关的更多信息。
此数据可能会以JSONP的形式进入跨域。我们正在构建的内容实际上是一个可嵌入的小部件,用于访问我们客户的一些网页 - 数据以JSONP形式出现。
这可能有点幼稚(和初始-y) - 但是我可以将这个无效的JSON作为有效JSON字段的文本值传递,然后在客户端修复它/解析吗?
答案 0 :(得分:2)
不,你不能只是传递JSON中的漏洞。数组不能有连续的逗号:
请参阅json.org:
你能做的是:
undefined
解析后替换它eval
代替JSON.parse
(这只是一个有效的解决方案,因为您也是数据生产者)就个人而言,在这种情况下,我使用NaN
(这是数字数组中缺少数字的行业标准)与eval
结合使用(像gson这样的库可以在JSON中编写NaN,因为缺席显然是不幸的。)
答案 1 :(得分:2)
jQuery尝试检测响应的响应格式,尝试为您验证响应格式。因此,如果它将其检测为JSON(通过Content-Type
的{{1}}标头,或者通过将application/json
选项设置为dataType
),则会抛出一个解析错误拒绝它。
您可以将jQuery放在其中并通过将json
设置为dataType
来自行处理解析;
text
...然后在您的响应处理程序中,对字符串执行替换操作以将无效的JSON转换为有效的JSON,然后使用jQuery.ajax('/foo.html', {
dataType: 'text'
}).done(jQuery.noop);
解析它;
jQuery.parseJSON
如果您控制发件人,您还可以查看hpack等解决方案。
答案 2 :(得分:0)
如果它总是只是一个带逗号的行,那么你可以做一些像\b,\b
的正则表达式替换(或者更聪明的东西,因为这有一些陷阱),并插入0,
0表示存在“空”无效行,然后解析最终结果。缩进并不重要,因此应该正常工作。
如果传入的数据以一致的方式被破坏,那么在将其解析为标准JSON之前简单地尝试“修复”它本身就没有任何错误。
答案 3 :(得分:0)
没有。这是一个糟糕的建议。建议回使用gzip或其他压缩机制而不是破坏格式。这可能导致其他人想要更多地打破格式。那时它不是JSON而是你自己的格式。
如果必须,发送一个可以检测的无意义值,例如-1或“”而不是空数组槽。这些会缩小文件,但仍然有效。