Как получить доступ к свойству JSON? - PullRequest
0 голосов
/ 04 сентября 2018

У меня проблемы с доступом к свойству JSON по значению ключа.

Это мой JSON, и я хотел бы получить доступ к overSerializedItems и underSerializedItems в формате строки, но не могу отобразить какие-либо данные

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

Я пытаюсь использовать следующий подход, но получаю сообщение об ошибке «Не удается прочитать свойство tostring () из неопределенного» * ​​1008 *

 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 голосов
/ 04 сентября 2018

Вы используете !== 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 на массивах ; они не существуют как свойства для массивов, они существуют как свойства объектов в пределах массивов. (Удаление их также имеет значение по умолчанию [].)

Live Пример:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...