javascript - JSON.parse()意外标记的数据编码

标签 javascript json character-encoding

我正在从服务器中提取一些数据并对其进行操作,然后尝试使用 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/

相关文章:

java - "En dash"在 http 响应处理或文本操作期间出现乱码

javascript - 如何在加载网站内容时显示加载屏幕

javascript - LitElement 不更新列表中的复选框

javascript - 使用 javascript 将目标 ="blank"添加到链接

javascript - 如何阻止 Safari(在 iPad 上)触发悬停事件?

php - 无法在 PHP 中访问或解析已解码的 json 结构

json - 如何在 Laravel 中禁用 JSON 响应的分块编码?

c# - 如何从嵌套的 JObject 中获取特定属性的值

iphone - 如何更改 UIWebView 中的字符编码?

java - Java 7 的内部字符编码