Jquery 从json访问javascript对象

Jquery 从json访问javascript对象,jquery,arrays,json,object,synchronized,Jquery,Arrays,Json,Object,Synchronized,我想加载一个本地json文件,并使用javascript/jquery读取数据。我打赌这是我的一个简单错误,但我无法让它工作。这是我到目前为止得到的代码: JSON文件: { "sound": { "title": "Bla 1", "file": "bla1" }, "sound": { "title": "Bla 2", "file": "bla2" } } JavaScript代码片段 $.ajax({ type: 'GET',

我想加载一个本地json文件,并使用javascript/jquery读取数据。我打赌这是我的一个简单错误,但我无法让它工作。这是我到目前为止得到的代码:

JSON文件:

{
  "sound": {
    "title": "Bla 1",
    "file": "bla1"
  },
  "sound": {
    "title": "Bla 2",
    "file": "bla2"
  }
}
JavaScript代码片段

$.ajax({
    type: 'GET',
    url: 'sounds.json',
    dataType: 'json',
    success: {},
    data: function(data) {audioFileLibrary = data},
    async: false
});
console.log("audioFileLibrary: " + audioFileLibrary);
console.log("currentAudioFile: " + audioFileLibrary[0]);
作为输出,我得到以下结果:

audioFileLibrary: [object Object]
currentAudioFile: undefined
出于测试目的,我尝试了以下代码:

for(var i = 0; i < audioFileLibrary.length; ++i){
    for(var ind in audioFileLibrary[i]) {
        console.log(ind);
        for(var vals in audioFileLibrary[i][ind]){
            console.log(vals, audioFileLibrary[i][ind][vals]);
        };
    };
};
for(var i=0;i
但是没有输出。。。 我希望有人能告诉我解决这个问题的方法。
感谢您的帮助。

首先,通过交换AJAX调用中的
数据
成功
属性来修复代码中明显的错误。这使得它能够帮助你解决真正的问题:

JSON文件包含一个具有两个同名属性的对象。解析后,结果中将只保留其中一个属性,因为Javascript对象中不能有两个同名属性

您可以使用以下名称访问该属性:

console.log("currentAudioFile: " + audioFileLibrary["sound"]);
如果希望能够从JSON访问两个内部对象,则需要将JSON更改为具有数组,例如:

[
  {
    "title": "Bla 1",
    "file": "bla1"
  },
  {
    "title": "Bla 2",
    "file": "bla2"
  }
]

现在,您可以使用原始代码访问第一个对象。

在这种情况下,您可能需要使用

这假设您按照建议更正json文件:

[
  {
    "title": "Bla 1",
    "file": "bla1"
  },
  {
    "title": "Bla 2",
    "file": "bla2"
  }
]
首先,根据所述,
数据
是您想要发送给服务器的内容,而不是返回的内容。您需要将
data
的值移到
success
属性

其次,您正试图访问一个对象的属性
0
,而该对象很可能没有此类属性。JSON是对象的对象:将它转换为对象数组,您的
[0]
查找应该可以工作

试试这个:

$.ajax({
键入:“GET”,
url:'sounds.json',
数据类型:“json”,
成功:功能(数据){
audioFileLibrary=数据;
log(“audioFileLibrary:+audioFileLibrary”);
log(“currentAudioFile:+audioFileLibrary[0]);
},
异步:false
});
根据这些数据:

[
{
“标题”:“Bla 1”,
“文件”:“bla1”
},
{
“标题”:“Bla 2”,
“文件”:“bla2”
}
]

您的JSON对象有两个具有相同键/名称的对象。您需要做的就是为每个子对象指定一个唯一的键/名称。

我找到了解决方案。我得换衣服

audioFileLibrary = data;
进入


现在它工作了。

您切换了
数据
成功
:-)这个问题似乎离题了,因为它是一个打字错误。你是对的,你没有看到那一点。谢谢我已编辑以更正此=)非常感谢您的回答,但我在尝试您的代码时没有得到任何输出。感谢您的代码,但我不想使用getJSON,因为我需要同步调用,getJSON是异步的。完全错过了
async:false
。我更改了JSON文件,但没有更改结果。但是谢谢你的回答和帮助
audioFileLibrary = data;
audioFileLibrary = $.parseJSON(JSON.stringify(data))