2015-05-09 50 views
0

以下URL前给了一个JSON输出: http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&q=Query我如何解析Google的建议查询JSON响应?

现在它输出以下:

window.google.ac.h(["Query",[["query",0],["query optimization",0],["query in access 2013",0],["query processing and optimization",0],["query optimization in dbms",0],["querying microsoft sql server 2012",0],["query in access 2010",0],["query letter",0],["querying microsoft sql server 2012 tutorial",0],["query access",0]],{"k":1,"q":"4-l7QUSZEiiQKaSq-yXfrtfHpd0"}]) 

好奇至于如何我可以解析成JSON

回答

1

这是JSONP这一点。

如果你调用这个使用JSONP技术(加入<script>标签与src=属性设置为网址的页面),那么你就需要作出JSONP调用处理结果之前声明函数window.google.ac.h

如果你调用这个用ajax或服务器上,那么你有两种选择:

  1. 声明功能可按window.google.ac.h处理结果,那么EVAL响应。 (因为,这就是加入<script>标签呢,它evals在你的页面的JavaScript文件,所以你基本上只是模仿JSONP)

    function window.google.ac.h (json) { 
        // process your response here 
    } 
    var s = document.createElement('script'); 
    s.src = 'http://suggestqueries.google.com/complete/search?' + 
         'client=youtube&ds=yt&q=Query'; 
    document.body.appendChild(s); 
    

    或者,如果您收到通过其他手段回应:

    function window.google.ac.h (json) { 
        // process your response here 
    } 
    eval(response); 
    
  2. 从响应中删除外部window.google.ac.h( ..和)然后将其解析为JSON。

    var json = response.replace(/^.*?\(/,'').replace(/\)$/,''); 
    
+0

AHK疑难杂症:d对不起,问这样一个新手的问​​题,但有可能给的代码片段,以它是如何在上述情况下,不是或两者兼而有之?从未使用过JSONP,因此有点困惑 – user3721307