res.map()不是res是数组对象的函数

时间:2018-05-14 10:49:26

标签: javascript mysql json

我有这种形式的数据

[ 

{ device_id: '12335',
    timestamp: '2018-05-14T08:31:23.000Z',
    temperatur: 21,
    pressure: 31,
    humidity: 20,
    equipment_name: 'truck5' },
  { device_id: '12335',
    timestamp: '2018-05-14T08:31:31.000Z',
    temperatur: 28,
    pressure: 35,
    humidity: 25,
    equipment_name: 'truck5' },
  { device_id: '12335',
    timestamp: '2018-05-14T08:31:33.000Z',
    temperatur: 36,
    pressure: 44,
    humidity: 33,
    equipment_name: 'truck5' },
  { device_id: '12335',
    timestamp: '2018-05-14T08:31:36.000Z',
    temperatur: 31,
    pressure: 39,
    humidity: 30,
    equipment_name: 'truck5' },
  { device_id: '12345',
    timestamp: '2018-05-14T08:31:23.000Z',
    temperatur: 21,
    pressure: 31,
    humidity: 20,
    equipment_name: 'truck5' },
  { device_id: '12345',
    timestamp: '2018-05-14T08:31:31.000Z',
    temperatur: 28,
    pressure: 35,
    humidity: 25,
    equipment_name: 'truck5' },
  { device_id: '12345',
    timestamp: '2018-05-14T08:31:33.000Z',
    temperatur: 36,
    pressure: 44,
    humidity: 33,
    equipment_name: 'truck5' },
  { device_id: '12345',
    timestamp: '2018-05-14T08:31:36.000Z',
    temperatur: 31,
    pressure: 39,
    humidity: 30,
    equipment_name: 'truck5' } ]

这是我从sql数据库中获取的数据。所以我用它来存储返回的结果。

var res1 =[];
res1 = JSON.parse(JSON.stringify(result));

但现在当我在这个数据上使用map函数时,我正在

  

res1.map()不是函数。

为什么会这样?

Map函数适用于所有数组对象。当我将此数据手动复制到变量res1=[{..}]时,它工作得更早。但现在它没有用。

  

console.log(result)给了我这个

[ RowDataPacket {
device_id: '12335',
timestamp: 2018-05-14T08:31:23.000Z,
temperatur: 21,
pressure: 31,
humidity: 20,
equipment_name: 'truck5' },

  RowDataPacket {
    device_id: '12335',
    timestamp: 2018-05-14T08:31:31.000Z,
    temperatur: 28,
    pressure: 35,
    humidity: 25,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12335',
    timestamp: 2018-05-14T08:31:33.000Z,
    temperatur: 36,
    pressure: 44,
    humidity: 33,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12335',
    timestamp: 2018-05-14T08:31:36.000Z,
    temperatur: 31,
    pressure: 39,
    humidity: 30,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:23.000Z,
    temperatur: 21,
    pressure: 31,
    humidity: 20,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:31.000Z,
    temperatur: 28,
    pressure: 35,
    humidity: 25,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:33.000Z,
    temperatur: 36,
    pressure: 44,
    humidity: 33,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:36.000Z,
    temperatur: 31,
    pressure: 39,
    humidity: 30,
    equipment_name: 'truck5' } ]

这就是为什么我正在使用JSON.stringify()。只是使用JSON.parse()给我错误。 这是我正在使用的mysql函数

db.query(query,
         function (err, result, fields) {
    if (err) throw err;
    var res1 =[];
    res1=JSON.parse(JSON.stringify(result));
  console.log(res1);
  series:[
                res1.map(function(s) {
                    // Meta is only needed if using the tooltip plugin.
                    return {x: s.timestamp, y: s.temperature, meta: s.temperature + ' on ' + s.timestamp.toDateString()};
                })
            ]
 });

我在使用typeof result或res之后将对象作为类型,或者在没有JSON.parse()

的情况下使用它

2 个答案:

答案 0 :(得分:2)

JSON.stringifyJSON.parse彼此相反。如果从API获取JSON字符串,则需要使用JSON.parse将其转换为JavaScript对象(在您的情况下为数组)。

另一方面,我不认为JSON.stringify会对你有所帮助。试试这个:

var res1 = JSON.parse(result);
res1.map( ... );

要详细了解您收到的回复,可以使用console.log(typeof result)。如果对控制台产生string,请使用JSON.parse。如果它产生object,则根本不需要使用JSON.parse

答案 1 :(得分:1)

来自服务器端的JSON对象(嗯,字符串...)格式不正确。您对帖子进行了大量编辑,并更改了从服务器获得的原始响应。假设这是从服务器获取的字符串(称为'x'):

x = 
"[ RowDataPacket {
device_id: '12335',
timestamp: 2018-05-14T08:31:23.000Z,
temperatur: 21,
pressure: 31,
humidity: 20,
equipment_name: 'truck5' },

  RowDataPacket {
    device_id: '12335',
    timestamp: 2018-05-14T08:31:31.000Z,
    temperatur: 28,
    pressure: 35,
    humidity: 25,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12335',
    timestamp: 2018-05-14T08:31:33.000Z,
    temperatur: 36,
    pressure: 44,
    humidity: 33,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12335',
    timestamp: 2018-05-14T08:31:36.000Z,
    temperatur: 31,
    pressure: 39,
    humidity: 30,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:23.000Z,
    temperatur: 21,
    pressure: 31,
    humidity: 20,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:31.000Z,
    temperatur: 28,
    pressure: 35,
    humidity: 25,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:33.000Z,
    temperatur: 36,
    pressure: 44,
    humidity: 33,
    equipment_name: 'truck5' },
  RowDataPacket {
    device_id: '12345',
    timestamp: 2018-05-14T08:31:36.000Z,
    temperatur: 31,
    pressure: 39,
    humidity: 30,
    equipment_name: 'truck5' } ]"

并且以下解析它没有错误:

JSON.parse(
    x
    .replace(/timestamp:\s*(.*),/gi,function(m,g1){return 'timestamp: "'+g1+'",'})
    .replace(/RowDataPacket\s*\{|\}\s*(?=,|\s*\])/gi,function(m){return /\}/gi.test(m) ? "}" : "{"})
    .replace(/(?:\w|_)+(?=:)/gi,function(m){return /^\d/gi.test(m) ? m : '"'+m+'"'})
    .replace(/'/gi,'"')
    .replace(/\d+(?=\s*,)/gi,function(m){return '"'+m+'"'})
)

这是修复错误的一种非常平凡的方式。最好从服务器端对其进行字符串化并发送它。