json获得字段名称

时间:2013-01-17 18:56:45

标签: javascript jquery

我想将字段名称推入选项值,将结果推送到选择的文本中。它应该是这样的:

<select id="ddl_fields">
    <option value="RoleId">e407d28a</option>
    <option value="RoleName">Sales</option>
</select>

这是从数据库返回的json对象:

"[{"RoleId":"e407d28a","RoleName":"Sales"}]"

这是代码,它会返回一个有效的结果:

function getFields(){
        var the_id = $(".hid_ID").val();
        var jsonText = JSON.stringify({ id: the_id });
        $.ajax({
            type: "POST",
            url: "bc_Admin.aspx/getFields",
            data: jsonText,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data.d != "0") {
                    var obj = $.parseJSON(data.d);
                     //what needs to change???
                    $.each(obj, function (index, value) {
                        $('#ddl_fields')
                        .append($("<option value=" + value.id_Role + ">" + value.RoleName + "</option>"));
                    });
                }
            } //end success
        });
    }

与此问题类似但需要JQuery解决方案。 How to get/list all field names of a JSON data with ExtJS?

谢谢!

5 个答案:

答案 0 :(得分:2)

您必须遍历对象的键,并使用hasOwnProperty来确保它是对象的键而不是其原型的键。

var key, keys = [];

for (key in obj) {
  if (obj.hasOwnProperty(key))
    keys.push(key)
}

答案 1 :(得分:2)

您需要遍历该对象并使用hasOwnProperty()。

for (var i in inputData) {
  if (inputData.hasOwnProperty(i)) {
  console.log(i + " , " + inputData[i]);
}}

此示例将仅记录到控制台键:值。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

答案 2 :(得分:2)

假设data.d采用您发布的格式obj是一个数组,并且您希望迭代数组中的对象而不是数组本身。

$.each(obj[0], function (index, value) {
    $('#ddl_fields')
    .append($("<option value=" + index + ">" + value + "</option>"));
});

答案 3 :(得分:0)

只需更改

$.each(obj, function (index, value) {

$.each(obj[0], function (index, value) {

问题是你在json中返回一个数组

答案 4 :(得分:0)

不确定我是否理解,但这就是我要做的事情,以获得你想要的东西(我也简化了你的代码):

function getFields(the_id){
    $.ajax({
        type: "POST",
        url: "bc_Admin.aspx/getFields",
        data: { id : the_id },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            for(var i = 0; i < data.length; i++){
                console.log(i + ": " + data[i]);
            }
        },
        error : function(s , i , error){
            console.log(error);
        }
    });
}