检索纯文本JSON,插入JavaScript

检索纯文本JSON,插入JavaScript,javascript,json,url,Javascript,Json,Url,我有一个URLhttp://myapp.com/get_data返回应用程序/json内容类型。当我浏览到那个URL时,我会在浏览器窗口中得到一个纯文本JSON数组 [[key, value], [key, value], [key, value], ...] 我还有一个JavaScript函数,它希望数据采用JSON数组格式 function process_data() { var data = // give me more data in JSON array format.

我有一个URL
http://myapp.com/get_data
返回
应用程序/json
内容类型
。当我浏览到那个URL时,我会在浏览器窗口中得到一个纯文本JSON数组

[[key, value],
 [key, value],
 [key, value],
 ...]
我还有一个JavaScript函数,它希望数据采用JSON数组格式

function process_data() {
  var data = // give me more data in JSON array format...
}
如何让JavaScript浏览到
http://myapp.com/get_data
并将生成的JSON数组分配到
process_data()
内的
data
变量中

我是JavaScript新手(来自Python背景),如果您能推荐使用核心JavaScript库的解决方案,我将不胜感激。也欢迎使用其他库的解决方案,最好是那些被认为是最佳实践的解决方案

更新 看来我的问题不清楚。让我提供一个Python示例。在完成必要的导入之后,我可以做如下事情

url = "http://myapp.com/get_data"
page = urllib2.urlopen(url)
page_source = page.read()
function process_data() {
  url = "http://myapp.com/get_data"
  page = urllib2.urlopen(url)
  page_source = page.read()
  var data = convert_str_to_JSON(page_source)
}
这一次,
page\u source
已经是一个Python
str
对象,我可以轻松地使用它,分配给其他变量,等等。如果我可以将Python和JavaScript混合在一起,在这个问题的上下文中,我想做如下的事情

url = "http://myapp.com/get_data"
page = urllib2.urlopen(url)
page_source = page.read()
function process_data() {
  url = "http://myapp.com/get_data"
  page = urllib2.urlopen(url)
  page_source = page.read()
  var data = convert_str_to_JSON(page_source)
}
当然,这只是一个丑陋的乱七八糟的代码,但我希望它传达了我想要表达的意思:

  • JavaScript将
    获取一个URL
  • 阅读来源
  • 将源代码解释为JSON
  • 将其分配给一个变量

  • 如今,使用JQuery几乎是一种标准:

    $.get('/get_data', function (data) {
       //success callback
    
    }, 'json');
    
    我在这里拉小提琴,看看这里的样品: -正在从以下位置获取json数据:

    参考资料:


    较新的浏览器本机支持JSON解析

    您可以说
    JSON.parse('JSON data')
    。对于较旧的浏览器(如IE 7或6),您可以使用以下库:

    使用上述库中的
    json2.js
    。它检查是否存在本机浏览器实现,如果不存在,则添加它

    不要使用
    eval
    (as)

    更新:要获取“json数据”,请使用以下命令:

    var jsonObject = {}; 
    var xhr = new XMLHttpRequest();
    xhr.open( "GET", url, true );      // true makes this call asynchronous
    xhr.onreadystatechange = function () {    // need eventhandler since our call is async
         if ( xhr.readyState == 4 && xhr.status == 200 ) {  // check for success
            jsonObject = JSON.parse( xhr.responseText );
         }
    };
    xhr.send(null);
    

    另外,我建议阅读本文,了解跨浏览器问题和
    XMLHttpRequest
    对象的实现。

    有两种方法。如果您使用的是某种库,大多数库都有内置的JSON.parse()方法。较新的浏览器(如Chrome、Firefox、Safari等)内置了这种功能

    另一种方法是使用jsonp回调。使用此方法,您可以在脚本中定义一个函数,然后将脚本标记写入页面,加载您希望加载的url作为其源。将函数名作为参数传递给远程uri,服务器用回调函数包装json响应。当它加载到页面中时,您的函数将使用它包装为javascript对象的数据执行

    这是一个简单的例子:

    var your_callback = function(obj){
        console.log(obj);
    }
    
    <script src="http://myapp.com/get_data/?callback=your_callback"></script>
    
    var your_callback=函数(obj){
    控制台日志(obj);
    }
    
    此时,将执行_回调,“obj”变量包含您的数据

    同样,如果您有使用javascript库的优势,那么这个功能可能已经被使用了。jQuery使这一点变得非常简单


    JSONP通常用于跨域数据传输,但在本地也同样有效。但是,如果您在本地执行此操作,则不需要使用JSONP,而可以使用XHR请求。

    如果您使用jQuery库,则可以使用jQuery JSONP库

    也在你的“http://myapp.com/get_data" 页面需要将JSON数据放入回调数据中

    callback(json_data_here)
    

    那篇文章很古老。还说没那么邪恶;-)如何检索
    “json数据”
    ,首先只给出URL?我已经更新了我的问题来解决它:)@andyb:它是邪恶的,至少约翰·雷西格这么认为:)。他使用
    新函数(“return”+data)
    而不是
    $.parseJSON
    中的eval@纳文,我要回敬你:-)
    eval有别名。不要使用函数构造函数
    。我想我的观点是邪恶误导了我,我认为除非绝对必要,否则避免是一个更好的说法。但是eval函数是JavaScript最被误用的特性。避免它。我想对于没有JSON的浏览器来说,函数构造函数是更好的选择。就我个人而言,我使用json2.js:)顺便说一句,为什么我们要花大量时间来讨论IE:p您在示例中展示的所有json中,第一个不是json。这是一个数组数组。将[[key,value],[key,value],[key,value],…]复制到并检查有效性。请粘贴您的实际回复。@naveen。是的,我的示例本身就是无效的JSON<代码>键
    都是占位符。JSONLint没有说数组数组是一个错误。它只抱怨预期的数据类型<代码>[[“键”、“值”],[“键”、“值”]]足够好了。我接受更正。我一直认为他们会被父母的反对所包围,我不会说是标准的。除了jQuery,还有很多人使用框架。我个人更喜欢Ender或MooTools。