开发者

get key name from json object

This is almost exactly the same as this question json get key names as text?, but that response isn't working for me.

I've got a json object

{"userList":[
{"user1":[{"username":"mike","memberSince":"01/03/2011"}]},
{"user2":[{"username":"john","memberSince":"01/05/2011"}]},
]}

The only reason I have a the "user1" and "user2" labels is because I'm storing the userlist by userId in jQuery data, and then stringifying it to put it in a cookie and send it in another page. I know, sounds stupid, but I'm just building some front end stuff to prove a point before doing this properly with a db.

So the

jQuery('div#userList').data('user1',user1JSON);

turns into

{"user1":[{"username":"mike","memberSince":"01/03/2011"}]}

when using

var userlist=JSON.stringify(jQuery('d开发者_如何学编程iv#userList').data());

Because of this, the user info is now a child of the userId, instead of just being a child of userlist.

In order to get the user info, I should be able to say

for(u=0;u<userList.length;u++){
   var userInfo=userList[u][0];
}

but unfortunately this is just giving me an undefined error. If I use

var userInfo = userList[u]['user1'];

I get the user info correctly.

So, can somebody correct me as to why userList[u][0] does not work, OR

explain to me how to use JSON.stringify without adding the userid to the beginning of the string?


That is because the userList[u] returns an object, not an array.

And you cannot access the object properties with an index..

you could try

for(u=0;u<userList.length;u++){
   for (var user in userList[u])
        {
          // user is the key
          // userList[u][user] is the value
          var userInfo=userList[u][user];
        }
}


You can use jQuery each function to iterate.

data=obj.userList
jQuery.each(data, function(key,value){
  var username=value.username;
  var memberSince=value.memberSince;
  ...
}


How about changing your object like this:

{"userList":[
  {"id": "user1", "username": "mike", "memberSince": "01/03/2011"},
  {"id": "user2", "username": "john", "memberSince": "01/05/2011"}
]}

Then, you can index into the userList array more naturally. That's probably more like what your data will eventually look like coming back from a database backend anyway.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜