Невозможно преобразовать undefined или null в объект при выполнении итерации по действительному JSON - PullRequest
0 голосов
/ 31 марта 2020

У меня есть действительный JSON с этой структурой

const myJSONExample = {
  "SubItems": [
    {
      "SubItems": [
        {
          "ItemNo": "000001"
        }
      ],
      "ItemNo": null,
      "Number": null,
      "price": 114.46

    },
    {
      "SubItems": [
        {
          "Group": "0.4.004"
        }
      ],
      "type": null
    },
    {
      "SubItems": [
        {
          "ItemNo": "000005"
        },
        {
          "Quantity": 2
        }
      ],
      "Material": "Steel"
    },
    {
      "Description": null
    }
  ]
}

и я просто пытаюсь отформатировать все типы чисел в ней, используя рекурсивную итерацию.

const iterate = (obj) => {
    Object.keys(obj).forEach(key => {

    if(typeof(item[key]) == "number"){
                            item[key] = new Intl.NumberFormat("de-DE").format(item[key]) //format number for german lang.
                        }

    if (typeof obj[key] === 'object') {
            iterate(obj[key])
        }
    })
}

iterate(myJSONExample);

Я использовал эту функцию на других JSON, и некоторое время пытался понять, почему это выдает TypeError: Cannot convert undefined or null to object

1 Ответ

2 голосов
/ 31 марта 2020

ноль - это "объект", следовательно, ваша проблема. Так что добавьте правдивую проверку

const iterate = (obj) => {
  Object.keys(obj).forEach(key => {

    const value = obj[key]
    const valueType = typeof value

    if (valueType === "number") {
      obj[key] = new Intl.NumberFormat("de-DE").format(value)
    } else if (valueType === 'object' && value) {
      iterate(value)
    }
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...