从Json Key Value Pair获取Value的问题

时间:2010-02-04 17:04:32

标签: jquery json

我正在关注this link以构建客户端转发器。

根据以上链接从Json键值对中检索值,我们可以使用result [i] .property,例如

for (var post in msg)
{     
    var x= msg[post].Date;
    alert(x);
}

这里x从Json字符串返回日期。当我尝试对我的数据使用相同的内容时,它始终返回undefined。我试图弹出一个alert(msg.d),显示一个包含我所有数据的好Json字符串。但是当我尝试msg[post].Date(property name)时,它总是返回undefined

请帮助..

提前致谢。

更新

从后端我返回一个通用列表,然后使用以下代码将其转换为Json。

public static string ConvertToJSON(this object obj)     {

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());    

    MemoryStream ms = new MemoryStream();
    serializer.WriteObject(ms, obj);
    string jsonobj = Encoding.Default.GetString(ms.ToArray());
    ms.Dispose();
    return jsonobj;
}

然后我将返回的Json附加到stringbuilder并将其返回到Jquery ajax方法。返回的Json看起来像一个字符串,而不是一个对象,因此我无法从Json键值对中获取任何值.. < / p>

3 个答案:

答案 0 :(得分:1)

如果您将此消息添加到ajax中,该消息会有什么帮助吗?

dataFilter: function(data)
            {
                var msg;
                if (typeof (JSON) !== 'undefined' &&
                typeof (JSON.parse) === 'function')
                    msg = JSON.parse(data);
                else
                    msg = eval('(' + data + ')');
                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            },

请注意,然后将其处理为msg,而不是msg.d,如下所示:

success: function(msg)
            {
                SaveSuccess(msg);
            },

答案 1 :(得分:1)

<强>更新

听起来你是在服务器端对数据进行双重序列化,返回一个JSON字符串,该字符串被序列化为JSON本身。当它到达客户端并且jQuery自动反序列化第一层JSON时,你仍然留下你手动构建的JSON字符串。

您应该返回List<T>作为服务方法的返回值,并让框架处理JSON序列化。

原始答案:

假设对象仍然包含在ASP.NET AJAX's ".d" wrapper中,正如您暗示的那样:

for (var post in msg.d) {     
  var x = msg.d[post].Date;

  alert(x);
}

或者,传统的循环,可能更直接:

for (var i = 0; i < msg.d.length; i++) {
  var x = msg.d[i].Date;

  alert(x);
}

答案 2 :(得分:0)

在我看来,就像你开始使用一系列对象一样,使用你的样本进行以下工作:

messages = [{"AnsNo":0,"Answer":"","Category":"Help Centre.Mortgages.Existing customers","ClickURL":null,"ID":7,"Question":"How do I re-mortgage to you?","RecNo":0,"ValidFrom":"\/Date(-62135596800000+0000)\/","ValidUntill":"\/Date(-62135596800000+0000)\/"}]

for(i in messages)
{
    message = messages[i];
    //Says "Help Centre.Mortgages.Existing customers"
    alert(message.Category)
    //To get all key/value pairs
    for(key in message)
    {
        //Alerts all key value pairs one by one
        alert("Key:" + key + ", Value:" + message[key]);
    }
}