是否有正确的方法来解析JavaScript中以循环开头的JSON?

时间:2018-10-05 15:05:07

标签: javascript json

我知道我可以使用jQuery和其他库轻松处理此问题,但我想亲自了解处理这些响应的最佳方法。我花了很多时间寻找处理它们的正确方法,但是我发现它们为什么存在的原因是相同的:反劫持。

因此,标题说明了一切。我知道一种非常普遍的实现方式是利用while循环的前缀,可以使用.replace(/^while\(\d*\);/, '')来处理,但是这感觉像是一种粗暴而骇人的处理方式,它只能解决一个可能的变化

有更好的处理方法吗?

为简单起见,例如:

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", function() {
    console.log(this.responseText);
});
oReq.open("GET", "http://www.example.org/example.json");
oReq.send();

这可能会产生如下响应:

while(1);{"menu":{"id":"file","value":"File","popup":{"menuitem":[{"value":"New","onclick":"CreateNewDoc()"},{"value":"Open","onclick":"OpenDoc()"},{"value":"Close","onclick":"CloseDoc()"}]}}}

2 个答案:

答案 0 :(得分:1)

  

这感觉像是处理它的粗俗方法,它只能说明一种可能的变化。

不,这正是您要做的。或更不通用的.slice(9)。服务器不添加任何甚至是动态生成的循环,它们使用最短/最简单的一个to prevent JSON hijacking。因此,您只需要处理所请求服务使用的特定前缀即可。

答案 1 :(得分:0)

除了replace()之外,另一种方法可能是在前9个字符中使用slice(),因为while(1);具有 9 个字符,因此您可以丢弃它并使用{ {1}},使其成为字符串对象。

JSON.parse()