【问题标题】:get key name from json object从 json 对象获取键名
【发布时间】:2011-01-10 23:20:44
【问题描述】:

这与这个问题json get key names as text? 几乎完全相同,但该响应对我不起作用。

我有一个 json 对象

{“用户列表”:[ {"user1":[{"username":"mike","memberSince":"01/03/2011"}]}, {"user2":[{"username":"john","memberSince":"01/05/2011"}]}, ]}

我有“user1”和“user2”标签的唯一原因是因为我在 jQuery 数据中通过 userId 存储用户列表,然后将其字符串化以将其放入 cookie 并发送到另一个页面。我知道,听起来很愚蠢,但我只是在构建一些前端的东西来证明一点,然后再用 db 正确地做到这一点。

所以

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

但不幸的是,这只是给了我一个未定义的错误。如果我使用

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

我正确获取了用户信息。

那么,有人可以纠正我为什么 userList[u][0] 不起作用,或者

向我解释如何使用 JSON.stringify 而不将用户 ID 添加到字符串的开头?

【问题讨论】:

    标签: jquery json key


    【解决方案1】:

    那是因为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];
            }
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用jQuery对每个函数进行迭代。

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

      【讨论】:

      • 为了子孙后代,afifsay 做对了——这才是应该做的。此处示例:jsfiddle.net/URSbz
      【解决方案3】:

      像这样改变你的对象怎么样:

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

      然后,您可以更自然地对 userList 数组进行索引。这可能更像是您的数据最终从数据库后端返回的样子。

      【讨论】:

      • 我想这样做,但我不知道如何更改结构。获取 jQuery('div#userInfo').data() 时,jQuery 将结果放入 key:[object] 中(如果我正确的话),我不知道如何才能摆脱它。如果可以的话那就太好了!
      • 应该不难,使用 jQuery 的map。用这些 div 的外观示例更新问题(即 id、用户名和 memberSince 在哪里,以及这些元素位于什么类型的元素中?)
      • 感谢 Dave,我不熟悉地图。我明天有机会试试,然后奖励你!
      • 感谢 Dave 的帮助,不幸的是,在这种情况下我无法使用 map。我没有得到一个元素数组,我将 json 作为“数据”存储在一个元素中,所以 user1 的 json 在 jQuery('div#userList').data('user1',user1Json) 我不能弄清楚在使用 jQuery('div#userList').data() 检索所有不同的数据对象时如何映射它虽然感谢您的帮助,但您肯定会因为向我介绍另一个很棒的 jQuery 方法而获得积分(如果那是什么这就是所谓的)。
      • 如果您使用一些示例标记更新问题,我将向您展示如何从中拉出扁平对象。这绝对是可能的。
      猜你喜欢
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多