我正在从服务器中提取一些数据并对其进行操作,然后尝试使用 JSON.parse() 将字符串加载到对象中。但是,每当我尝试执行此操作时,都会收到 Unexpected Token
错误。奇怪的是,chrome 通常会告诉我意外的标记是什么(通常是“o”或其他东西)。这次只是一个空间。这让我认为存在某种类型的 ascii 编码错误或发生了某些事情。如果我执行 console.log()
将 json 字符串打印到控制台,然后将其直接粘贴到代码中,那么解析该字符串就没有问题。
var testString = '[ { "pk": 1663, "state": "IO", "group": "ALO", "species": "", "application_link": "" } ]';
var testObject = JSON.parse(testString);
alert(testObject);
完全按照我的预期工作。但这并不:
function hex2ascii(hexx) { //stolen off stackoverflow
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
function decodeData(encoded){
var original_string = '';
for (var i = 0; i < encoded.length; i+=2) {
var index = i/2;
var hex_value = encoded[i]+encoded[i+1];
var ochar = hex2ascii(hex_value);
original_string += ochar;
}
return original_string;
}
$.get(url, function(data) {
var testString = decodeData(data); //decodeData grabs a hex string and then decodes it into a json formatted string
var testObject = JSON.parse(testString); //Unexpected Token
alert(testObject);
});
有人对如何解决此问题有任何想法吗?
编辑: 我不知道为什么,但我的字符串中有一堆空值。当我迭代 json 字符串并将其转换回十六进制时,我得到:
hex_string = ''
for(var i = 0; i < decoded_data.length; i++){
if (i < 10){
alert(decoded_data[i]);
}
hex_string += ascii2hex(decoded_data[i])+' ';
}
console.log(hex_string);
>>>0 0 5b 0 0 7b 0 0 22 0 0 70 0 0 6b 0 0 22 0 0 3a 0 0 20 0 0 31 0 0 36 0 0 36 0 0
再次编辑:
好的,我已将其固定在我的串联方法上。由于某种原因,当我在decodeData函数中将它连接在一起时
original_string += ochar;
它抛出了一堆空字符。还有其他方法可以将字符串连接在一起吗?
编辑答案:
好的,所以问题出在 hex2ascii 函数上。它添加了一堆空字符。这是我从堆栈溢出中窃取的代码,并不是我所期望的。我最终将其更改为这个,现在它是金色的。
function hex2ascii(hexx) {
var hex = hexx.toString();//force conversion
return String.fromCharCode(parseInt(hex, 16));
}
最佳答案
你不能在javascript字符串中输入换行符,这会使其无效。
无效
var testString = '[ {
"pk": 1663,
"state": "IO",
"group": "ALO",
"species": ""
]}';
有效
var testString = '[ {"pk": 1663,"state": "IO","group": "ALO","species": ""]}';
关于javascript - JSON.parse()意外标记的数据编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400425/