【问题标题】:Accessing fields in .json file访问 .json 文件中的字段
【发布时间】:2016-11-09 00:08:01
【问题描述】:

我正在关注这篇文章 (https://www.visualstudio.com/docs/integrate/extensions/develop/add-dashboard-widget) 来创建一个小部件以将其添加到 Microsoft 仪表板。

在我的 html 文件中,有一段我无法开始工作的代码:

...(some code above)
return TFS_Wit_WebApi.getClient().getRevision(284,6)
                        .then(function (query) {

                            var $list = query.rev;        
                            var $container = $('#query-info-container');
                            $container.empty();
                            $container.append($list);

... (some code below)

在这一行:

  var $list = query.rev; 

我正在尝试访问 .json 文件“rev”变量。

这是我的 .json 文件

    {
      "count": 15,
      "value": 
      [
        {
          "id": 284,
          "rev": 1,
          "fields": {
            "System.WorkItemType": "User Story",
            "System.State": "New",
            "System.Reason": "New",
            "System.CreatedDate": "2016-06-23T14:31:37.567Z",
         }, 

...(some code below)

我可以访问这个“rev”变量。

但是,现在我想访问“字段”,即

"System.State": "New",

代替

var $list = query.rev; 

我试过了

var $list = query.fields.System.WorkItemType[0]; 
And 
var $list = query.value.fields[0];
and 
var $list = query.fields; 

但是,这不起作用。

这里有一些关于如何访问它的文档

fields: {[key: string]: any}.

但这并没有多大帮助。

任何帮助将不胜感激! 谢谢!

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    您可以将 JSON 对象用作一种“映射”,这意味着它们是由键值对组成的。

    var $list = query.fields['System.State'];
    

    正如您在问题中已经提到的,有许多不同的方法可以访问 JSON 对象属性。但是,如果属性的名称中包含点或空格,则需要回退到数组表示法。这意味着以下尝试将产生正确的结果:

    • query.fields
    • query[fields]
    • query.fields['System.State']
    • query[fields]['System.State']

    但下面的不会:

    • query.fields.System.State
    • query[fields].System.State

    发生这种情况是因为,在最后两种方式中,JavaScript 会认为您正在尝试访问 query.fields.System 对象(不存在)的 State 属性。

    这同样适用于具有名称包含空格的属性的对象。以object['my property'] 访问它们会起作用,但将点符号与object.my property 一起使用则不会。

    有关此问题的其他问题可以在此处查看:

    【讨论】:

    • 我明白了,谢谢!有效!另外,还有一个简短的问题。我可以通过索引访问“字段”内的变量吗?比如, var $list = query.fields[0];或类似的东西?
    • 由于 JSON 对象是一个地图,您将无法使用 0、1、2 之类的索引来访问它除非您明确定义名为 0、1、2 的属性... -- 索引符号用于遍历数组,但不是 JSON 对象。您可以使用for ... in 遍历所有属性(并确保使用hasOwnProperty 检查属性以确保安全)。
    • 看看这里,看看你是怎么做到的:stackoverflow.com/questions/684672/…
    • 谢谢!我还在学习所有这些东西,你帮了我很大的忙!
    【解决方案2】:

    试试这个:

     var $list = query.fields["System.WorkItemType"]; 
    

    由于点,JavaScript 会将 System 和 WorkItemType 解释为嵌套属性。

    【讨论】:

      【解决方案3】:

      获取 json 元素非常简单:

      1º 创建一个新的 var 以将 json 数据转换为一个新对象。真的json有javascript对象格式。

      var data = '{ "count": 15, "value": [ {"id": 284, "rev": 1, "fields": {"System.WorkItemType": "User Story", "System.State": "New", "System.Reason": "New", "System.CreatedDate": "2016-06-23T14:31:37.567Z", }, ...(some code below) '
      
      var json = JSON.parse(data);
      

      2º 通过“.”访问对象的特定元素或“[]”:

      点符号:

      var json.value[n].fields['System.State'];
      

      请注意,您可以将点表示法与 System.State 键一起使用。

      [] 符号:

      var json['value'][n]['fields']['System.State'];
      

      作为n 访问对象数组特定元素的索引

      【讨论】:

        猜你喜欢
        • 2018-10-31
        • 1970-01-01
        • 2021-03-04
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        相关资源
        最近更新 更多