【问题标题】:Access JSON Property from Nested Object从嵌套对象访问 JSON 属性
【发布时间】:2019-08-06 08:56:39
【问题描述】:

下面有一个嵌套的 JSON 对象作为 responseObject 返回,我想访问属性“消息”。

 var reponseObject = 
    "{
        "DynamicBundleResponse":
            {
                "status":"204",
                "message":"Business error has occured",
                "PropertyChanged":null
            }
    }"

我根据互联网上的一些回复尝试了以下操作,但都返回未定义:

  1. responseObject.DynamicBundleResponse.message
  2. responseObject["DynamicBundleResponse"].message

    我根据互联网上的一些回复尝试了以下操作,但都返回未定义:

  3. responseObject.DynamicBundleResponse.message

  4. responseObject["DynamicBundleResponse"].message

    var 响应对象 = "{ “动态捆绑响应”: { “状态”:“204”, "message":"发生业务错误", “属性更改”:空 } }"

        var res = responseObject.DynamicBundleResponse.message //returning undefined
    

变得不确定。

【问题讨论】:

  • 因为您的responseObject 实际上是一个字符串而不是object。你必须解析它。

标签: javascript arrays json


【解决方案1】:
var reponseString = `{
    "DynamicBundleResponse":
        {
            "status":"204",
            "message":"Business error has occured",
            "PropertyChanged":null
        }
}`;

var responseObject = JSON.parse(responseString);
var message = responseObject.DynamicBundleResponse.message;

【讨论】:

    【解决方案2】:

    使用. 点符号来访问属性。该对象采用字符串格式(也错误地使用了"")。使用JSON.parse(object) 解析对象,然后使用相同的步骤继续

    var reponseObject = 
        {
            "DynamicBundleResponse":
                {
                    "status":"204",
                    "message":"Business error has occured",
                    "PropertyChanged":null
                }
        }
        console.log(reponseObject.DynamicBundleResponse.message)

    【讨论】:

      【解决方案3】:

      你只需要将字符串解析成一个对象:

      var reponseObject =  '{"DynamicBundleResponse": { "status": "204", "message": "Business error has occured", "PropertyChanged": null } }'
      
      const asObject = JSON.parse(reponseObject);
      
      console.dir(asObject.DynamicBundleResponse.message)

      【讨论】:

        【解决方案4】:

        这里有几点需要注意:

        1. 拼写错误: 声明时的变量名与用于访问对象的变量不同。在两个地方使用相同的变量名。
        2. 双引号在大括号前后使用,看起来像一个字符串,但如果在代码中使用,会报错-Uncaught SyntaxError: Unexpected identifier。只要去掉第一个和最后一个双引号,它就变成了一个对象。

        现在您可以通过您尝试的两种方式访问​​“消息”属性。

        var responseObject = { "DynamicBundleResponse": { "status":"204", "message":"Business error has occured", "PropertyChanged":null } };
        console.log(responseObject.DynamicBundleResponse.message);
        console.log(responseObject["DynamicBundleResponse"].message);
        

        注意:如果您想继续将对象声明为字符串,请使用单引号以避免语法错误,然后将字符串解析为 JSON,如其他答案中所述。 p>

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2012-11-12
          • 2020-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-09
          • 2016-07-13
          • 1970-01-01
          相关资源
          最近更新 更多