2016-01-23 100 views
1

如何检查JSON对象键是否具有某个值?如何检查JSON对象键是否具有一定的值

我使用PHP来获取数据和json_encode以获取JSON输出。之后我使用Ajax将结果追加到div中。

我试图做到的,是如果某个键具有一定的价值 - 然后做他们组合在一起:这样的事情:

If Key_Status = "value_Solved" { 
// do something 
} else If Key_Status = "value_Not_Solved" { { 
// do something else 
}; 

我没有收到任何错误,也没有输出。

这是我迄今取得:

     $.ajax({ 
        url: "api-json.php?api", 
       data: {id: idGet}, 
        dataType: "text", 
        success: function(data) { 
         var json = $.parseJSON(data); 
         if (json) { 
          $.each(json, function(idx, obj) { 
           //now json variable contains data in obj format 
           //let's display a few items 
           var id = obj.task.id; 
           var customer = obj.task.customer; 
           var task = obj.task.task; 
           var status = function(key, val) { 
            var elm = obj.task.status; 
            if (elm == 'Solved') { 
             $("#"+id).css("background", "blue"); 
             console.log("#"+id); 
            } 
           }; 
           var solver = obj.task.solver; 
           var issuer = obj.task.issuer; 
           var added = obj.task.added; 
           var label = obj.task.label; 

           $('#results') 
           .append(" <div class='board-list-box' id='" + id + "'> <a class='board-list-box-edit'><span class='edit'></span><span class='update'></span><span class='delete'></span><span class='screen-reader-text'>Edit</span></a> <label class='board-list-box-label " + label + "'></label> <p class='board-list-box-text'> " + task + "</p> <span class='board-list-box-info'>" + added + "</span> </div>"); 
          }); 
         } else { 
          $('#results').html("<p class='error'>" + json + " tasks to do </p>"); 
         } 
        }   
       }); 

我的JSON输出是这样的:

[ 
    { 
    "task": { 
     "id": "537", 
     "task": "Test 1", 
     "description": "", 
     "customer": "", 
     "issuer": "", 
     "solver": "", 
     "label": "green", 
     "status": "Not started", 
     "deadline": "0000-00-00 00:00:00", 
     "added": "16-01-24 06:20:55" 
    }, 
    "comments": "comments", 
    "labels": "labels" 
}, 
{ 
    "task": { 
     "id": "538", 
     "task": "Test 2", 
     "description": "", 
     "customer": "", 
     "issuer": "", 
     "solver": "", 
     "label": "green", 
     "status": "Not started", 
     "deadline": "0000-00-00 00:00:00", 
     "added": "16-01-24 06:20:58" 
    }, 
    "comments": "comments", 
    "labels": "labels" 
} 

]

+0

你的方法是有效的(即使它是一个JS对象,而不是JSON),你是否有错误? – MinusFour

+0

提供更好的问题解答。您没有使用传入该函数的参数,并且其他变量从无处出现 – charlietfl

+0

我没有得到任何回报。我更新了我的代码。看上面。这是我如何提取 – Rorabih

回答

1

编辑答案:

让我们参考以下方法:

function CheckTasks() { 
    var Tasks = '[{ "task": { "id": "537", "task": "Test 1", "description": "", "customer": "", "issuer": "", "solver": "", "label": "green", "status": "Not started", "deadline": "0000-00-00 00:00:00", "added": "16-01-24 06:20:55" }, "comments": "comments", "labels": "labels" }, { "task": { "id": "538", "task": "Test 2", "description": "", "customer": "", "issuer": "", "solver": "", "label": "green", "status": "Not started", "deadline": "0000-00-00 00:00:00", "added": "16-01-24 06:20:58" }, "comments": "comments", "labels": "labels" }]'; 

    var obj = JSON.parse(Tasks); 
    var groupedTasks=[]; // Array which will have the Task IDs if the Status is Not started. 

    for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     //alert(obj[key].task.status); // To access the Status of a Task 

     if (obj[key].task.status == "Not started") { 
     groupedTasks.push(obj[key].task.id); // Push the Task ID in the array. 
     } 
    } 
    } 
    alert(groupedTasks) ; // The Grouped Tasks with Status as Not started will be available in this Array. 
} 

JSON.parse()方法将字符串解析为JSON。

key指存在的任务数量。我们有2个任务(537 & 538)。

hasOwnProperty()方法返回一个布尔值,指示对象是否具有指定的property

在上面的代码中,我们遍历每个key(任务)并检查它是否有property或不。如果它有property,则使用obj[key].task.status获取value

创建了一个数组groupedTasks,如果状态为未启动,则将这些任务的ID添加(推送)到此数组中。

请参考此JSFiddle链接并检查结果。

+0

你能解释一下如何使用它吗?我知道这一点,我想学习正确的方法。 – Rorabih

+0

@Rorabih,我给出了示例代码。数据[键]将具有所有的对象。要访问每个对象,您必须使用data [key] .OBJECTNAME(您在代码中给出的)。请详细说明您的要求,如果您觉得有用,请接受答案。 –

+0

我是新来的,所以请耐心等待。我没有得到你刚刚给出的语法和解释。在这种情况下OBJECTNAME和hasOwnPropery是什么(对应于我上面的问题)。我想实现的目标是在我的JSON中查看每个具有相同**状态(JSON中的一个键)的任务**,然后将它们组合在一个div中。希望你能理解。 – Rorabih

相关问题