【发布时间】:2022-01-14 11:57:20
【问题描述】:
我有一个来自 Web 服务器的 JSON,如下所示:
{"timestamp":1642069251.6908009,"station_id":"ORBB","channel":5,"freq":131.725,"level":-28.1,"error":0,"mode":"2","label":"Q0","block_id":"8","ack":false,"tail":"A6-ANR","flight":"G90369","msgno":"S10A"}
{"timestamp":1642069257.00876,"station_id":"ORBB","channel":5,"freq":131.725,"level":-41.3,"error":0,"mode":"2","label":"Q0","block_id":"7","ack":false,"tail":"PH-HXO","flight":"HV6905","msgno":"S28A"}
{"timestamp":1642069259.057013,"station_id":"ORBB","channel":5,"freq":131.725,"level":-24.9,"error":0,"mode":"D","label":"Q0","block_id":"9","ack":false,"tail":"A6-ANR","flight":"G90369","msgno":"S11A"}
l have followed this answer 但我在控制台中没有可显示的内容。
我无法编辑上面的数据 JSON 以提供有效的 JSON,因为它来自使用 Ajax 的数据服务器。
$(document).ready(() => {
$.ajax('acarsdec.json', {
type: 'GET',
//dataType: "text",
timeout: 10000,
cache: false,
}).done(function (data, textStatus, jqXHR) {
const dataasfile = `data:text/plain;base64,${btoa(data)}`;
fetch(dataasfile).then(res => res.text()).then(text => {
let jsonstr = `[${text.split('\n').join(',')}]`;
let json = JSON.parse(jsonstr);
console.log(json);
});
})
})
【问题讨论】:
-
您需要删除
dataType: "json"- 它告诉 jQuery 自动将响应解析为 JSON,但是当它是 not 有效的 JSON 时当然会失败。 -
(对于
\n的分割,你应该确保没有一个值可以包含这种换行符。否则,这将失败或导致错误的数据.) -
来自服务器的 JSON 无效。考虑从源头上修复它?
-
是的,它不是 JSON,因此不应使用
dataType: "json"。也许删除它会使 jQuery 猜测错误,必须明确设置为"text"。 -
那么您正在格式化的数据似乎还有其他问题。正如@evolutionxbox 建议的那样,这通常最容易从源头修复,因此它会生成有效的 JSON。生成随机数据并尝试在接收端将格式转换为 JSON 通常注定要失败。有很多潜在的问题。作为猜测,您可能在末尾有一个额外的换行符,因此生成的字符串类似于
[1, 2, 3, ]这将是无效的。
标签: javascript json