如何访问JSON属性?

时间:2018-09-04 15:13:41

标签: javascript angularjs

我无法通过键值访问JSON属性。

这是我的JSON,我想以字符串格式访问overSerializedItemsunderSerializedItems,但无法显示任何数据

response = [{
    "storeId": "2011",
    "overSerializedItems": [{
        "overshipid": "8901260932784148868F"
      },
      {
        "overshipid": "8901260145723866348F"
      },
    ],
    "underSerializedItems": [],
  },
  {
    "storeId": "2011",
    "overSerializedItems": [],
    "underSerializedItems": [{
        "undershipid": "89"
      },
      {
        "undershipid": "81"
      },
    ],
  }
]

我正在尝试以下方法,但收到错误消息“无法读取未定义的属性tostring()”

 for(const item of response) {
  const json = {
      'Store #': item.storeId,
      'Overshipment': item.overSerializedItems !== null ? 
       item.overSerializedItems.overshipid.toString() : [], //Here values i should get 8901260932784148868F,8901260145723866348F
       'Undershipment':item.underSerializedItems !== null ? 
       item.underSerializedItems.undershipid.toString() : [] // Here values i should get are 89,81 
     }  
}

1 个答案:

答案 0 :(得分:1)

您正在使用!== null检查响应中是否缺少overSerializeItems和/或underSerializedItems。该检查将是错误的,因为如果不存在它们,则当您尝试在对象上访问它们时,将得到undefined,而不是null

在这两种情况下,由于它们既不存在也不存在,因此只需使用item.overSerializedItems ?防护:

for (const item of response) {
  const obj = { // not JSON
    'Store #': item.storeId,
    'Overshipment': item.overSerializedItems ?
      item.overSerializedItems : [],
    'Undershipment': item.underSerializedItems ?
      item.underSerializedItems : []
  }
  console.log(obj);
}

,或者如果不提供该数组,则提供默认的[],请使用||

for (const item of response) {
  const obj = { // not JSON
    'Store #': item.storeId,
    'Overshipment': item.overSerializedItems || [],
    'Undershipment': item.underSerializedItems || []
  }
  console.log(obj);
}

还请注意,.toString()overshipid上的undershipid毫无意义;它们已经是字符串。但是无论如何,我已经删除了该内容,因为您试图在数组上使用.overshipid.undershipid;它们不作为数组的属性存在,而是作为对象中的属性存在。 (删除它们也会使这里的[]默认值更有意义。)

实时示例:

const response = [{
    "storeId": "2011",
    "overSerializedItems": [{
        "overshipid": "8901260932784148868F"
      },
      {
        "overshipid": "8901260145723866348F"
      },
    ],
    "underSerializedItems": [],
  },
  {
    "storeId": "2011",
    "overSerializedItems": [],
    "underSerializedItems": [{
        "undershipid": "89"
      },
      {
        "undershipid": "81"
      },
    ],
  }
];

for (const item of response) {
  const obj = { // not JSON
    'Store #': item.storeId,
    'Overshipment': item.overSerializedItems || [],
    'Undershipment': item.underSerializedItems || []
  }
  console.log(obj);
}
.as-console-wrapper {
  max-height: 100% !important;
}