Я использую функцию Google Cloud Platform, которая прослушивает Pub / SubTopic и вставляет данные в BigQuery.
Входные данные, которые я передаю из консоли pub / sub, представлены в формате JSON {"NAME"," ABCD "}, но из журнала консоли я мог видеть, что сообщение приходит как {NAME, ABCD}, и во время выполнения это также ошибка.2 распространенные ошибки, с которыми я столкнулся
SyntaxError: Неожиданный токен n в JSON в позиции 1 в Object.parse (native) at exports.helloPubSub "
"ОШИБКА: {Ошибка: недопустимое значение в 'row [0] .json'"
Введено:
gcloud pubsub topics publish pubsubtopic1 --message {"name":"ABCD"}
Опробованы различные форматы входных данных с одинарными кавычками и квадратными скобками, а также с другими возможными параметрами. Ничего не помогаеткоторый упоминался выше, но заканчивается row[0]
issue
Когда я передаю входные данные JSON в виде жестко закодированных значений внутри облачной функции, такой как {"NAME", "ABCD"}
, данные вставляются правильно.
/**This is working code since i hardcoded the data in JSON format, commented the lines which i tried and did not helped**/
/**
* Triggered from a message on a Cloud Pub/Sub topic.
*
* @param {!Object} event Event payload and metadata.
* @param {!Function} callback Callback function to signal completion.
*/
exports.helloPubSub = (event, callback) => {
const pubsubMessage = event.data;
console.log(Buffer.from(pubsubMessage.data, 'base64').toString());
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
//console.log(Buffer.from(pubsubMessage.data, 'base64').toString());
//console.log(JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString()));
var myjson='{"NAME":"ABCD","STATE":"HHHH","AGE":"12"}';
console.log(myjson);
bigquery
.dataset("DEMO")
.table("EMP")
.insert(JSON.parse(myjson),
{'ignoreUnknownValues':true, 'raw':false})
//.insert(JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString()),
.then ((data) => {
console.log('Inserted 1 rows');
console.log(data);
})
.catch(err => {
if (err && err.name === 'PartialFailureError') {
if (err.errors && err.errors.length > 0) {
console.log('Insert errors:');
err.errors.forEach(err => console.error(err));
}
} else {
console.error('ERROR`enter code here`:', err);
}
});
};