当前位置: 首页 > 知识库问答 >
问题:

从文件加载json到对象

童花蜂
2023-03-14

努力将json从URL上的文件(myData.json)加载到对象中,以便访问属性值。

--数据立即加载,我在应用程序中非常需要它。

-我将访问整个应用程序中的数据,而不仅仅是数据加载后立即发生的一个函数的一部分。

--我已确保文件中的数据格式正确。

按照jQuery API上的示例,我不应该做一些简单的事情,比如:

警报(jqxhr.my财产);

得到价值吗?我错过了哪一步?我试过做评估和其他类似的事情

var myObj=JSON。parse(jqxhr);

无济于事。

请非常感谢。

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });

共有3个答案

宋景福
2023-03-14

我认为这将是你正在寻找的,你试图访问从你的调用返回的数据,而不是调用者对象本身。在您的示例中,jqxhr是处理JSON调用的对象,而不是数据。所以,

$.getJSON("example.json", function(data) {
  yourDATA = data;
})

//Use your data here
alert(yourDATA.aProperty);

本页上的第一个示例与我解释的类似。

雷骁
2023-03-14

json数据被传递到$的回调函数。getJSON。因此,这将起作用:

var jqxhr;

$.getJSON("example.json", function(data) {
  jqxhr = data;
});

// alert(jqxhr.property);
// caution: this won't work immediately on load, since the ajax call runs asynchronously and hasn't finished at that time

// it should be available at a later time, like a click event
$('a#something').click(function(){
     if(jqxhr){
          alert(jqxhr.property);
     }else{
          alert('getJSON not yet complete or failed');
     }
});
劳英华
2023-03-14

我觉得你把它弄得太复杂了:)

 var JSON;

 $.getJSON('example.json', function(response){
       JSON = response;
       alert(JSON.property);
 })
 //feel free to use chained handlers, or even make custom events out of them!
 .success(function() { alert("second success"); })
 .error(function() { alert("error"); })
 .complete(function() { alert("complete"); });

getJSON函数会自动将响应转换为正确的JSON对象。不需要解析。

您提到您正在到处使用这些数据,所以您必须等待ajax调用完成后才能访问这些数据。这意味着要么在getJSON回调中包装整个应用程序。或者使用自定义事件来确定:

 var JSON;

 $(window).on('JSONready', function(){
       alert(JSON.property);
 });

 $.getJSON('example.json', function(response){
       JSON = response;
       $(window).trigger('JSONready');
 });

 $('#elem').on('click', function(){
       //event likely to take place after ajax call has transpired
       //it would still be better to assign this listener in a callback, 
       //but you can get away with not doing it, if you put in a catch
       if(JSON){
           alert(JSON.property);
       }          
 });

编辑

经过快速的实时调试,数据不可用的真正原因是:消耗JSON的javascript位于一个文件中,其中包括执行内联javascript调用的页面文档NORTH。因此,JSON不是一个全局变量,范围阻止了它的使用。如果您真的需要一个全局变量,以便它可以与内联JS以及任何和所有包含的js文件一起使用,您可以这样做:

  (function(){
      var limitedScopeVariable = 25;
      window.globalScopeVariable = 30;
  })();

  $(function(){
       alert(globalScopeVariable); //works!
       alert(limitedScopeVariable); //fails!
  });

编辑2

从jQuery 3.0开始,回调函数有所不同:从jQuery 3.0开始,jqXHR.成功()、jqXHR.错误()和jqXHR.完成()回调方法被删除。您可以使用jqXHR.做()、jqXHR.失败()和jqXHR.总是()来代替

来自评论@mario lurig

 类似资料:
  • 问题内容: 我需要从多个JSON文件中加载数据,每个文件中都有多个记录到Postgres表中。我正在使用以下代码,但无法正常工作(在Windows上使用pgAdmin III) SAMPLE.JSON文件的内容是这样的(从许多这样的记录中得到两个记录): 问题答案: 试试这个:

  • 问题内容: 我正在使用JSON传输数据。 我需要在HTML页面中使用Ajax读取仅在脚本中包含一个JSON对象的文件吗? 我是否也需要jQuery,或者是否可以使用Ajax加载该JSON文件? 在不同的浏览器上是否有所不同? 问题答案: 您不需要任何库,香草javascript中的所有内容均可用,以获取json文件并进行解析:

  • 问题内容: 我正在尝试在Python中加载和解析JSON文件。但是我在尝试加载文件时遇到了困难: 产量: 我看着 18.2。— Python文档中的 JSON编码器和解码器 ,但是通读这个看起来糟透了的文档非常令人沮丧。 前几行(用随机条目匿名): 问题答案: 您有一个JSON Lines格式的文本文件。您需要逐行解析文件: 每 行都 包含有效的JSON,但总的来说,它不是有效的JSON值,因为没

  • 是否可以从服务器加载Spring Boot配置。json文件,而不是。亚马尔。房产?从文档来看,这是不支持开箱即用的——我想知道这是否可能,如果可能的话,人们将如何着手呢?

  • 问题内容: 我正在尝试加载本地JSON文件,但无法正常工作。这是我的JavaScript代码(使用jQuery): test.json文件: 什么都没有显示,Firebug告诉我这是未定义的。在Firebug中,我可以看到它是好的且有效的,但是当我复制该行时,这很奇怪: 在Firebug的控制台中,它可以正常工作,并且我可以访问数据。 有人有解决方案吗? 问题答案: 是异步的,所以您应该这样做:

  • 问题内容: 我试图将我的网站从基于XML的配置文件迁移到基于JSON的配置文件。有没有一种方法可以加载文件,使其变成对象?我一直在搜索网络,但找不到。我已经将文件转换并另存为。我宁愿不使用第3方库。 问题答案: 您 确实 应该使用已建立的库,例如Newtonsoft.Json(甚至Microsoft都使用MVC和WebAPI等框架),或者.NET的内置JavascriptSerializer。 这