我正在尝试检索JSON数组中存在的值。但是,我的代码无法执行它.Below发布的是该文件的样子。
{
"meta" :
{
"view" :
{
"description" : "This data set shows the location of Baltimore
City's Services.",
"columns" :
[ {
"cachedContents" :
{
"top" :
[
{
"item" : "American Rescue Workers"
}]
}]
}
}
我的抱歉,如果我的JSON文件有一些语法问题。我正在尝试访问cachedContents中的item元素。发布的是代码。
$(document).ready(function(){
$.get("https://data.baltimorecity.gov/api/views/hyq3-
8sxr/rows.json",function(data)
{
$.each(data.meta.view,function(i,obj)
{
if(i=="name")
$("#result").append("<p align='center'>"+obj+"
</p>");
if(i=="description")
$("#result").append("<p align='center'>"+obj+"</p>");
if(i=="columns")
var length = data.meta.view.columns.length;
for(i2=0;i2<length;i2++)
{
$.each(obj[i2].columns.cachedContents,function(i,obj[i2]){
$("#result").append("<p align='center'>"+"Hello"+"</p>")
});
} }); }); });
我得到的错误是
SyntaxError: missing ) after formal parameters
$.each(obj[i2].columns.cachedContents,function(i,obj[i2]){
任何建议都会有所帮助
答案 0 :(得分:2)
您正在尝试命名参数obj[i2]
,这是不合法的。
答案 1 :(得分:1)
正如已经指出的那样,你正在使用非法的参数名称。在这种情况下,您正在做的是为回调创建匿名函数并声明参数。 Javascript将负责将obj [i2]值传递给函数。您也可以考虑不使用i2,i3,i4等,因为它变得难以阅读更复杂。
此外,您的代码可以使用一些工作来使其更容易使用和更高效。
最重要的是,你在循环中使用JQuery选择器,这需要程序每次都遍历DOM。相反,你应该像这样缓存对象:$ result = $(“#result”);
您通过使用多个if语句以冗余方式检查“i”的状态。相反,名称和描述的一个语句使其更快,然后使用else,如果这样,如果它在第一种情况下返回true,则不必进行第二次检查。
最后,创建一个命名函数并将其作为回调传递更具可读性,并且有助于模块化和可重用性,而不是创建一串匿名函数。
提供的代码应该可以正常工作,尽管我没有其他项目来测试它。
$(document).ready(function(){
function someFunction(){
$.get("https://data.baltimorecity.gov/api/views/hyq3-8sxr/rows.json", parseData(data));
function parseData(data){
var $result = $("#result");
$.each(data.meta.view, appendData(index, value))
function appendData(index, value){
var leng;
if(index === "name" || index === "description"){
$result.append("<p align='center'>"+value+"</p>");
}else if(index === "columns"){
leng = data.meta.view.columns.length;
}
for(var j = 0; j > leng; j++){
value[j].columns.cachedContents.forEach(
function(val){
$result.append("<p align='center'>"+"Hello"+"</p>");
}
);
}
}
}
}
});