1

我有来自服务器的这个 json 数据

{

"store":[{"skey":"asdsad123das","name":"Store1"},  {"skey":"3308d976d2647659f130d09593be845a","name":"joji store"}],

"manager":[{"mkey":"asdsad123das","name":"manager 1"},{"mkey":"asdsad123da2","name":"Manager 2"},{"mkey":"asdsad123da3","name":"Manager 3"}]

}

我想读那个数据。当我尝试阅读它时,它总是让我感到无精打采。我正在做这样的事情

 success: function(msg){

            //alert(msg['store'].name);
            for (var keys in msg)
            {
                    //alert(keys);
                    alert(keys['name']);
                    for (var data in keys)
                    {
                            alert(data);

                    }
            }
      },
4

2 回答 2

2

您正在访问 JSON,就像访问字典或数组一样。JSON 的工作方式不同。假设我们将 JSON 存储在我们调用的变量中data,如下所示:

var data = {
  "store": [ {
    "skey": "asdsad123das",
    "name": "Store1"
  }, {
    "skey": "3308d976d2647659f130d09593be845a",
    "name": "joji store"
  } ],
  "manager": [ {
    "mkey": "asdsad123das",
    "name": "manager 1"
  }, {
    "mkey": "asdsad123da2",
    "name": "Manager 2"
  }, {
    "mkey": "asdsad123da3",
    "name": "Manager 3"
  } ]
};

然后我们可以像这样访问特定的键:

data.store[0].skey     // skey of first element of store array of data object

如果要遍历 中的数据data,可以执行以下操作:

for (index in data.store) {
  console.log(data.store[index]);       // prints whole object
  console.log(data.store[index].skey);  // prints skey
  console.log(data.store[index].name);  // prints name
}

这个小提琴的例子:http: //jsfiddle.net/u4HzZ/2/

于 2013-07-13T20:22:50.927 回答
2

通常,当您有一个带有命名键的对象(从 JSON 数据或其他地方获得)时,您不太可能想要遍历这些键。您更有可能希望通过名称专门引用这些键。毕竟, astore与 a 完全不同manager,不是吗?

$.each()在大多数情况下,编写一个循环(或等价物,例如)在其中迭代存储和管理器并对它们执行相同的操作并没有多大意义。您可能想对商店做一件事,而对经理做另一件事。

OTOH,根据您在此处拥有的特定数据,商店记录看起来确实很像经理记录。每个人都有一个名字;区别在于商店有一个skey,经理有一个mkey。因此,仅出于记录数据的目的,您可以执行以下操作(小提琴):

var data = {
    "store": [
        { "skey": "asdsad123das", "name": "Store1" },
        { "skey": "3308d976d264", "name": "joji store" }
    ],
    "manager":[
        { "mkey":"asdsad123das", "name":"manager 1" },
        { "mkey":"asdsad123da2", "name":"Manager 2" },
        { "mkey":"asdsad123da3", "name":"Manager 3" }
    ]
};

function success( data ) {
    list( data.store, 'skey' );
    console.log( ' ' );
    list( data.manager, 'mkey' );
    function list( array, key ) {
        $.each( array, function( i, item ) {
            console.log( item[key], ':', item.name );
        });
    }
}

success( data );

请注意,我们使用data.storeanddata.manager来访问两个单独的数组中的每一个。(我之所以叫它data而不是msg因为msg听起来像是“消息”的缩写,而且这似乎不是任何类型的消息。)

但是由于数组本身是相似的,所以我使用了一个通用函数来记录它们中的每一个。该函数接受一个参数,告诉它是否使用skeyor mkey

在处理这些数据的实际代码中,您可能会发现您对 a 所做的事情与您对 a 所做的事情manager非常不同,store以至于您甚至不会在它们之间拥有这么多的通用代码。但是,一旦您能够可靠地访问该数据,您就可以从那里找出答案。

现在最重要的提示:你知道如何在你最喜欢的浏览器中使用 JavaScript 调试器吗?我推荐内置在 Chrome 中的那个,但也有适用于 Firefox 的 FireBug 和 Internet Explorer 中的内置调试器。

如果debugger;在代码中添加语句并在调试器打开的情况下加载页面,它将在该行代码处停止,然后您可以查看 locals/watch 面板中的变量,您可以使用控制台尝试不同的表达方式,看看他们做了什么。您还可以单步执行代码、单步执行函数等。您不再需要使用alert();您会发现这是调试代码的一种更好的方法。

这是有关 Chrome 开发人员工具的信息。如果您以前没有使用过这些调试工具,那么您应该认真地停止您正在做的所有其他事情并熟悉它们。它将获得巨大的回报。

于 2013-07-13T21:52:56.040 回答