Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果这个JSON数据是动态生成的,那么如何在Javascript/jQuery中访问它?_Javascript_Arrays_Json - Fatal编程技术网

如果这个JSON数据是动态生成的,那么如何在Javascript/jQuery中访问它?

如果这个JSON数据是动态生成的,那么如何在Javascript/jQuery中访问它?,javascript,arrays,json,Javascript,Arrays,Json,我将PHP动态生成的数组发送到Javascript。它基本上是一系列未读消息。它包含发件人的姓名和他们发送的邮件 鉴于我不知道他们的姓名,我如何检索他们的姓名和信息 {"Emma Giles": [{"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}], "Johnathan Macmanners": [{"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}], "Ellen Mur

我将PHP动态生成的数组发送到Javascript。它基本上是一系列未读消息。它包含发件人的姓名和他们发送的邮件

鉴于我不知道他们的姓名,我如何检索他们的姓名和信息

{"Emma Giles":
[{"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}],
"Johnathan Macmanners":
[{"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}],
"Ellen Murley":
[{"message":"Hello","date":"Fri 04 May 4:05 PM 2012"},
{"message":"How are you?","date":"Fri 04 May 2:52 PM 2012"}],
"Amanda Patterson":
[{"message":"test","date":"Fri 27 April 10:07 AM 2012"}],
"ALEX Pell":
[{"message":"Hi Alvon","date":"Mon 05 March 10:07 AM 2012"}]}
我已经试过了,但出于某种原因,它只打印出数字,我用val替换了key,它一个接一个地打印出数组中的每个字符:

$.each(data, function(key, val)
{
    console.log(key);
});

父容器是一个对象,而不是数组。然后就有了一个嵌套的对象数组

for (var key in data) {
    // key is the name of the person,
    // data[key] is the array containing the message data

    for (var i = 0, l = data[key].length; i < l; i++) {
      for (var msgKey in data[key][i]) {
         // msgKey will be "message" or "date"
         // data[key][i][msgKey] is the value of each key
      }  
    }
}
for(变量输入数据){
//key是这个人的名字,
//data[键]是包含消息数据的数组
对于(变量i=0,l=data[key]。长度;i
看起来您的数据仍然被序列化并被识别为字符串

请尝试使用以下方法获取数据:

$.getJSON(url, function (data) {
    $(data).each(function (key, value) {
        // ...
    });
});

。。。或者使用一个好的ol'
eval()
,但如果可以的话,您最好避免使用它。

稍微清理一下JSON,您得到了一个由指向消息对象数组的用户名组成的哈希:

var data = {
  "Emma Giles": [
    {"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}
  ],
  "Johnathan Macmanners": [
    {"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}
  ]
};
你几乎可以得到你想要的:

$.each(data, function(name, messages) {
   var messageText = messages[0].message;

   alert(name + ': ' + messageText);
});
仅供参考,这里有一个

这也可以:

var a = {"Emma Giles":
[{"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}],
"Johnathan Macmanners":
[{"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}],
"Ellen Murley":
[{"message":"Hello","date":"Fri 04 May 4:05 PM 2012"},
{"message":"How are you?","date":"Fri 04 May 2:52 PM 2012"}],
"Amanda Patterson":
[{"message":"test","date":"Fri 27 April 10:07 AM 2012"}],
"ALEX Pell":
[{"message":"Hi Alvon","date":"Mon 05 March 10:07 AM 2012"}]};

var keys = Object.keys(a);
for(var i = 0, max = keys.length; i < max; i++){
    var key = keys[i]; //name
    var val = a[key]; //messages array
    console.log(key);
    for(var j = 0, jmax = val.length; j < jmax; j++){
        var message = val[j].message;
        console.log("      "+message);
    }

}
var a={“Emma Giles”:
[{“信息”:“你好,菲尔”,“日期”:“2011年5月10日星期二下午2:55”},
“约翰纳森·麦克佩雷斯”:
[{“信息”:“你好,爱玛”,“日期”:“2011年6月26日星期日晚上10:03”},
“艾伦·莫利”:
[{“消息”:“你好”,“日期”:“2012年5月4日星期五下午4:05”},
{“留言”:“你好吗?”,“日期”:“2012年5月4日星期五下午2:52”},
“阿曼达·帕特森”:
[{“消息”:“测试”,“日期”:“2012年4月27日星期五上午10:07”},
“亚历克斯·佩尔”:
[{“信息”:“你好,阿尔文”,“日期”:“2012年3月5日星期一上午10:07”};
var keys=对象。keys(a);
对于(变量i=0,max=keys.length;i
如果可能的话,我建议更改此json的格式在这里工作得很好-嗯,有点不对劲。我尝试过数据[0]和数据[1],它似乎将整个json对象视为一个长强对象,因此[0]引用“{”,而[1]引用“”(单数双引号)。有人知道为什么会出现这种情况吗?基本上,没有
数据[0]
因为
数据
是一个字典,而不是一个常规的
数组
。同样,我看不出你开始使用的代码有什么特别的错误。啊,我忘了解析JSON,这就是为什么。