2012-05-16 53 views
0

我是json的新手,所以plz在这方面帮助我。 我试图从这个JSON检索值,例如:我想从这个JSON获取fname。 如何获得此值; 我试过showdata.fname,showdata.id [0] .fname,但没有得到 我知道这是愚蠢的追求问,但PLZ帮助我。如何从json中检索值

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" 
    } 
} 
+1

您的来源不是JSON,它是正常的JavaScript对象文字符号。 JSON是以纯ASCII格式表示的。你在找什么是showdata [“fc1d3f54-bcd3-2c4d-2626-cb9904e63800”]。fname – HBP

+0

http://stackoverflow.com/questions/10581347/convert-json-string-into-variables-to-echo-out/10581984#10581984这会帮助你 –

回答

1

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

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

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

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

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" 
    } 
]; 
+0

在hasOwnProperty(key)之后你错过了一个“)”,仅供参考 –

+0

需要帮助 – Nitish

+0

@limelights Thx!纠正。 – Sirko

0

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

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

其实,这是正确的语法。

请参阅本廷克:JSON Tinker

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 
0

看起来你正在使用的长十六进制字符串作为键,你将访问一个物品

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