получить имя ключа от объекта json - PullRequest
5 голосов
/ 11 января 2011

Это почти точно так же, как этот вопрос json получает имена ключей в виде текста? , но этот ответ не работает для меня.

У меня есть объект json

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

Единственная причина, по которой у меня есть ярлыки "user1" и "user2", заключается в том, что я сохраняю список пользователей по userId в данных jQuery, а затем преобразую в строку, чтобы поместить его в файл cookie и отправить на другую страницу. Я знаю, это звучит глупо, но я просто создаю некоторые вещи переднего конца, чтобы доказать свою точку зрения, прежде чем делать это правильно с БД.

Итак,

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

превращается в

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

при использовании

var userlist=JSON.stringify(jQuery('div#userList').data());

Из-за этого информация о пользователе теперь является дочерней по отношению к userId, а не просто является дочерней по отношению к userlist.

Чтобы получить информацию о пользователе, я должен сказать:

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

но, к сожалению, это просто дает мне неопределенную ошибку. Если я использую

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

Я правильно получаю информацию о пользователе.

Так, может кто-нибудь исправить меня относительно того, почему userList [u] [0] не работает, ИЛИ

объясните мне, как использовать JSON.stringify без добавления идентификатора пользователя в начало строки?

Ответы [ 3 ]

7 голосов
/ 11 января 2011

Это потому, что userList[u] возвращает объект, а не массив.

И вы не можете получить доступ к свойствам объекта с индексом.

Вы можете попробовать

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];
        }
}
5 голосов
/ 28 апреля 2013

Вы можете использовать jQuery для каждой итерации.

data=obj.userList
jQuery.each(data, function(key,value){
  var username=value.username;
  var memberSince=value.memberSince;
  ...
}
2 голосов
/ 11 января 2011

Как насчет изменения вашего объекта следующим образом:

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

Затем вы можете более естественно индексировать в массив userList. Вероятно, это больше похоже на то, как ваши данные будут в конечном итоге возвращаться из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...