0

我是 json 新手,所以请帮我解决这个问题。我正在尝试从此 json 中检索值,例如:我想从此 json 中获取 fname。我如何得到这个值;我尝试了 showdata.fname , showdata.id[0].fname,但没有让我知道这是愚蠢的要求,但请帮助我。

var showdata = {
    "fc1d3f54-bcd3-2c4d-2626-cb9904e63800": {
        "fname": "Nitish",
        "lname": "pakhare",
        "phoneno": "4545445",
        "id": "fc1d3f54-bcd3-2c4d-2626-cb9904e63800"
    },
    "6ae08ee6-b02d-0eeb-4ead-1d52bbdadf5e": {
        "fname": "Ashish",
        "lname": "Pakahre",
        "phoneno": "454545",
        "id": "6ae08ee6-b02d-0eeb-4ead-1d52bbdadf5e"
    },
    "7e418c15-17c1-da8e-b614-b362f7937eb9": {
        "fname": "Arpita",
        "lname": "kimar",
        "phoneno": "454545",
        "id": "7e418c15-17c1-da8e-b614-b362f7937eb9"
    }
}
4

5 回答 5

1

此代码记录fname此对象内的所有属性。

for( var key in showdata ) {
  if ( showdata.hasOwnProperty( key ) ) {
     console.log( showdata[ key ][ 'fname' ] );
  }
}

您实际上有一个具有多个属性的对象。上面的代码遍历所有属性,检查属性是否真的存在于这个对象中(这解决了一些来自 JavaScript 对象的原型性质的问题)并记录值。您应该用您的程序逻辑替换日志记录。

更容易的是使用数组而不是对象的实现。这样你就可以使用所有的原生 JavaScript 数组函数,比如mapetc。但是,在这种情况下,你会丢失你的键(除非你将它们作为附加属性添加到子对象中)。这将如下所示:

var showdata = [
    {
        "key": "fc1d3f54-bcd3-2c4d-2626-cb9904e63800",
        "fname": "Nitish",
        "lname": "pakhare",
        "phoneno": "4545445",
        "id": "fc1d3f54-bcd3-2c4d-2626-cb9904e63800"
    },
    {
        "key": "6ae08ee6-b02d-0eeb-4ead-1d52bbdadf5e",
        "fname": "Ashish",
        "lname": "Pakahre",
        "phoneno": "454545",
        "id": "6ae08ee6-b02d-0eeb-4ead-1d52bbdadf5e"
    },
    {
        "key": "7e418c15-17c1-da8e-b614-b362f7937eb9",
        "fname": "Arpita",
        "lname": "kimar",
        "phoneno": "454545",
        "id": "7e418c15-17c1-da8e-b614-b362f7937eb9"
    }
];
于 2012-05-16T09:32:30.087 回答
0

showdata.fc1d3f54-bcd3-2c4d-2626-cb9904e63800.fname应该是答案,但我不确定它会起作用。

于 2012-05-16T09:30:29.687 回答
0
showdata["fc1d3f54-bcd3-2c4d-2626-cb9904e63800"].fname

实际上,这是正确的语法。

请参阅此修补程序:JSON Tinker

于 2012-05-16T09:32:46.340 回答
0

如果你想访问它们,你可以这样做:

showdata.fc1d3f54-bcd3-2c4d-2626-cb9904e63800.fname

但这将是硬编码。相反,您可以通过循环访问它们。

var key, entry;

for(key in showdata){
    if(showdata.hasOwnProperty(key)){
        entry = showdata[key];
        //entry.fname
        //entry.lname
        //entry.phoneno
        //entry.id, which would be the same as key in your case
    }
}

您还可以考虑使用数组,这样您就不会对键进行硬编码:

var showdata = [
    {
        "fname": "Nitish",
        "lname": "pakhare",
        "phoneno": "4545445",
        "id": "fc1d3f54-bcd3-2c4d-2626-cb9904e63800"
    }, {
        "fname": "Ashish",
        "lname": "Pakahre",
        "phoneno": "454545",
        "id": "6ae08ee6-b02d-0eeb-4ead-1d52bbdadf5e"
    }, {
        "fname": "Arpita",
        "lname": "kimar",
        "phoneno": "454545",
        "id": "7e418c15-17c1-da8e-b614-b362f7937eb9"
    }
]

//showdata[0].fname
于 2012-05-16T09:32:59.257 回答
0

看起来您正在使用长 HEX 字符串作为键,您将访问类似的项目

showdata['fc1d3f54-bcd3-2c4d-2626-cb9904e63800']['fname']

方括号表示法比点表示法更受欢迎,因为它更适合查找内容,尤其是像这样的长键。

showdata['fc1d3f54-bcd3-2c4d-2626-cb9904e63800'].fname 

也可以

如果你希望它用整数索引,也许你可以像这样构造它:

var showdata = [
    { 
    "fname": "Nitish",
    "lname": "pakhare",
    "phoneno": "4545445",
    "id": "fc1d3f54-bcd3-2c4d-2626-cb9904e63800"
    },
    {
    "fname": "Ashish",
    "lname": "Pakahre",
    "phoneno": "454545",
    "id": "6ae08ee6-b02d-0eeb-4ead-1d52bbdadf5e"
    }
]

作为一个对象数组,那么你可以做

showdata[0].fname
于 2012-05-16T09:33:43.803 回答