【问题标题】:How to access JSON Object name/value?如何访问 JSON 对象名称/值?
【发布时间】:2012-06-09 08:27:48
【问题描述】:
function (data) {
    //add values based on activity type
    //data = JSON.parse(data);
    //alert(abc.Phone1);

    alert(data.myName)

    alert(data.toString());
    if (activityType == "Phone") {
    }
    return;

},

如您所见,$.ajax 从控制器获取JSON 数据的回调函数。

例如:

[{"name":"myName" ,"address": "myAddress" }]

在这种情况下,我的第一个警报给我未定义和第二个/第三个警报弹出窗口出现:

[{"name":"myName" ,"address": "myAddress" }]

如何按名称访问值,以便我的第一个警报填写myName,即name 的值?

【问题讨论】:

    标签: jquery ajax json asp.net-mvc-3


    【解决方案1】:

    您可以像以下那样做,而不是解析 JSON:

    $.ajax({
      ..
      dataType: 'json' // using json, jquery will make parse for  you
    });
    

    要访问 JSON 的属性,请执行以下操作:

    data[0].name;
    
    data[0].address;
    

    为什么你需要data[0],因为数据是一个数组,所以要检索它的内容,你需要data[0](第一个元素),它给你一个对象{"name":"myName" ,"address": "myAddress" }

    并且要访问对象的属性规则是:

    Object.property
    

    有时

    Object["property"] // in some case
    

    所以你需要

    data[0].name 等得到你想要的。


    如果你没有

    设置dataType: json 然后你需要使用$.parseJSON() 解析它们并像上面一样检索数据。

    【讨论】:

    • maps.googleapis.com/maps/api/geocode/… 来自这个 url 如何在变量中获取“formatted_address”字段值?成功 : function(data) { address = data['formatted_address'];} 抛出错误
    • 有更优化的方法吗?如果我有一个包含 20 多个名称的 json 列表并且我需要显示它们的值,但我不知道它们中的哪一个会在 json 中返回,它可能是其中一个或 3 个或 10 个或全部 20 个他们,我应该对他们每个人都重复同样的事情吗,例如:if data[0].name : console.log(data[0].name); if data[0].adress : console.log(data[0].adress); ..
    • 可以data[0].[0] 工作,访问name?把它看成一个数组。
    【解决方案2】:

    您收到的 JSON 是字符串。您必须将其转换为 JSON 对象 你已经注释了最重要的代码行

    data = JSON.parse(data);
    

    或者如果你使用的是 jQuery

    data = $.parseJSON(data)
    

    【讨论】:

    • 即使取消注释我收到未定义的行
    • 那是因为你的 JSON 是一个数组。尝试使用 data[0].name 而不是 data.name。并确保您访问属性不是值,即 data[0].name (property) 而不是您在问题 data.myName(which is value) 中所做的事情
    【解决方案3】:

    如果你的回复是{'customer':{'first_name':'John','last_name':'Cena'}}

    var d = JSON.parse(response);
    alert(d.customer.first_name); // contains "John"
    

    谢谢,

    【讨论】:

    • 嗨,如果我想提取“客户”,我将如何在客户是我想要的实际东西的情况下做到这一点。在我的情况下,我想提取下面的 aboutme.jpg 作为字符串 b'{"_id":"2","_rev":"5-760e627e77645e960c5cc40ea6cf03a2","_attachments":{"aboutme.jpg":{"content_type ":"image/jpeg","re​​vpos":3,"digest":"md5-mG5uU4IRGuY/f9PbZ8AIbQ==","length":98831,"stub":true}}}\n'
    【解决方案4】:

    你应该这样做

    alert(data[0].name); //Take the property name of the first array
    

    而不是

     alert(data.myName)
    

    即使您没有设置,jQuery 也应该能够为您嗅探数据类型,因此不需要 JSON.parse。

    在这里摆弄

    http://jsfiddle.net/H2yN6/

    【讨论】:

      【解决方案5】:

      试试这个代码..

      function (data) {
      
      
      var json = jQuery.parseJSON(data);
      alert( json.name );
      
      
      }
      

      【讨论】:

      • 我之前尝试过并收到错误 Microsoft JScript 运行时错误:对象不支持属性或方法 'parseJSON'
      【解决方案6】:

      您可能想尝试这种方法:

      var  str ="{ "name" : "user"}";
      var jsonData = JSON.parse(str);     
      console.log(jsonData.name)
      //Array Object
      str ="[{ "name" : "user"},{ "name" : "user2"}]";
      jsonData = JSON.parse(str);     
      console.log(jsonData[0].name)
      

      【讨论】:

        【解决方案7】:

        我认为您应该在 ajax 配置中提及 dataType: 'json' 并访问该值:

        data[0].name
        

        【讨论】:

          【解决方案8】:

          这是一个友好的建议。对 Firefox 使用 Chrome Developer ToolsFirebug 之类的东西来检查您的 Ajax 调用和结果。

          您可能还想花一些时间来了解像 Underscore 这样的帮助程序库,它补充了 jQuery,并为您提供了 60 多个有用的函数来使用 JavaScript 操作数据对象。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-06-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-06
            • 1970-01-01
            相关资源
            最近更新 更多