Как исправить «синтаксическую ошибку: неожиданный токен в позиции» при попытке передать данные в bigquery? - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь следовать этому codelab , и я получаю SyntaxError, когда получаю шаг 7.

SyntaxError: Unexpected token ' in JSON at position 1 at JSON.parse (<anonymous>) at exports.subscribe (/srv/index.js:9:26) at /worker/worker.js:825:24 at <anonymous> at process._tickDomainCallback (internal/process/next_tick.js:229:7)

Я попытался отредактировать const входящую строку json кода ниже, и я все еще получаю ошибку.

exports.subscribe = function (event, callback) {
    const BigQuery = require('@google-cloud/bigquery');
    const projectId = "iot2analytics-240915"; //Enter your project ID here
    const datasetId = "weatherData"; //Enter your BigQuery dataset name here
    const tableId = "weatherDataTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
    const PubSubMessage = event.data;
  // Incoming data is in JSON format
    const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
    const jsonData = JSON.parse(incomingData);
  var rows = [jsonData];

  console.log(`Uploading data: ${JSON.stringify(rows)}`);

  // Instantiates a client
  const bigquery = BigQuery({
    projectId: projectId
  });

  // Inserts data into a table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
    .then((foundErrors) => {
      rows.forEach((row) => console.log('Inserted: ', row));

      if (foundErrors && foundErrors.insertErrors != undefined) {
        foundErrors.forEach((err) => {
            console.log('Error: ', err);
        })
      }
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END bigquery_insert_stream]


  callback();
};

а вот и пакет json

{
  "name": "function-weatherPubSubToBQ-1",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

Я вижу на моем Raspberry Pi данные, собираемые с датчика, но я получаю сообщение об ошибке каждый раз, когда он пытается вставить в bigquery.

Любые предложения или помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 18 мая 2019

В вашем примере вы закодировали JSON как:

{
  'sensorID':'na',
  'timecollected':'1/1/1970 00:00:00',
  'zipcode':'00000',
  'latitude':'0.0',
  'longitude':'0.0',
  'temperature':'-273',
  'humidity':'-1',
  'dewpoint':'-273',
  'pressure':'0'
}

Если мы посмотрим на спецификацию JSON , мы обнаружим, что строки должны быть заключены в двойные, а не в одинарные кавычки.Замените свой JSON на:

{
  "sensorID":"na",
  "timecollected":"1/1/1970 00:00:00",
  "zipcode":"00000",
  "latitude":'0.0",
  "longitude":"0.0",
  "temperature":"-273",
  "humidity":"-1",
  "dewpoint":"-273",
  "pressure":"0"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...