我有这种形式的数据
[
{ 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()
的情况下使用它答案 0 :(得分:2)
JSON.stringify
和JSON.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+'"'})
)
这是修复错误的一种非常平凡的方式。最好从服务器端对其进行字符串化并发送它。