Firestore находит неопределенное значение в полностью определенном JSON, ключ даже не существует - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь загрузить JSON-объект в Google Firestore.

При установке объекта в документ Firestore, мой код выдает следующую ошибку:

Error: Value for argument "data" is not a valid Firestore document. 
Cannot use "undefined" as a Firestore value 
(found in field audit.`20`.requests.`0`.lrEndTimeDeltaMs).

Теперь первым деломЯ сделал запись объекта непосредственно перед загрузкой, чтобы проверить неопределенные значения:

console.log(JSON.stringify(resultsToUpload));

return database
  .collection("foo1")
  .doc("bar1")
  .set(resultsToUpload);

Мало того, что все значения определены в объекте, но упомянутое поле audit.`20`.requests.`0`.lrEndTimeDeltaMs даже не существует:

resultsToUpload = {  
  "audit":{   
    "20":{  
      "ronaldScore":3,
      "id":"network-requests",
      "requests":[  
        {  
          "url":"https://www.example.com/",
          "startTime":0,
          "endTime":62.16699999640696,
          "transferSize":15794,
          "resourceSize":78243,
          "statusCode":200,
          "mimeType":"text/html",
          "resourceType":"Document"
        }
      ]
    }
  }
}

Данные получены из аудита Lighthouse Google.

При вычислении длины строки UTF-8 для строковых объектов JSON получается размер 30 МБ.

1) Всезначения определены (некоторые являются нулевыми, что не должно быть проблемой).

2) Упомянутое поле даже не существует в JSON.

Мой вопрос: как это может произойти?Как поле может просто появиться?Также: Как бы я решил эту проблему?

1 Ответ

1 голос
/ 11 июня 2019

при использовании JSON.stringify для Javascript-Object скрывает все «неопределенные» значения (а также их ключи), а затем переводит в строку то, что осталось.

Это потому, что в JSON отсутствует такая вещь, как "undefined".

Таким образом, журнал показал полностью определенный JSON, даже если сам JS-объект содержал "неопределенные" значения.

...