kwhitley / treeize

Converts row data (in JSON/associative array format) to tree structure based on column naming conventions.
MIT License
189 stars 24 forks source link

Datetime value problem on multiple data #34

Open davidebettio opened 9 years ago

davidebettio commented 9 years ago

Hi, this is the result from getData(), look at "contracts:livemonitor:lastFixAt"...is empty, but below on seed data is NOT empty. This occur only with datetime values (i try with an integer at "lastConnectionAt" and is it ok!)

Thanks

[
  {
    "id": 10,
    "name": "Auto",
    "color": "ff0000",
    "contracts": [
      {
        "id": 32599,
        "alias": "GOLF",
        "plate": "DC789NW",
        "vehicleType": 1,
        "vehicleBrand": "AUDI",
        "vehicleModel": "A3",
        "services": [
          {
            "type": 17,
            "expireAt": "2014-09-26T07:20:49.000Z"
          },
          {
            "type": 6,
            "expireAt": null
          }
        ],
        "livemonitor": {
          "id": 37648,
          "online": 0,
          "callReason": 0,
          "disconnectReason": 1,
          "alarmStatus": 0,
          "anomaliesStatus": 0,
          "inputStatus": 0,
          "outputStatus": 0,
          "systemStatus": 25,
          "latitude": 45.66385833333333,
          "longitude": 8.70681,
          "speed": 0,
          "altitude": 245,
          "direction": 93,
          "battery": null,
          "inMovement": 0,
          "csq": 20,
          "lastConnectionAt": 8,
          "lastFixAt": {}
        },
        "device": {
          "id": 47561,
          "enabfun": 20673,
          "enabfun2": 65,
          "enabfun3": 132,
          "enabfun4": 0,
          "dealerId": 1,
          "country": {
            "isoCode": "IT",
            "prefix": "+39"
          },
          "apn": {
            "id": 3,
            "name": "Tim",
            "accessPoint": "ibox.tim.it"
          },
          "model": {
            "id": 17,
            "name": "GT999.16"
          }
        }
      }
    ]
  }
]

original data

[
  {
    "id": 10,
    "name": "Auto",
    "color": "ff0000",
    "contracts:id": 32599,
    "contracts:alias": "GOLF",
    "contracts:plate": "DC789NW",
    "contracts:vehicleType": 1,
    "contracts:vehicleBrand": "AUDI",
    "contracts:vehicleModel": "A3",
    "contracts:device:id": 47561,
    "contracts:device:enabfun": 20673,
    "contracts:device:enabfun2": 65,
    "contracts:device:enabfun3": 132,
    "contracts:device:enabfun4": 0,
    "contracts:device:dealerId": 1,
    "contracts:device:model:id": 17,
    "contracts:device:model:name": "GT999.16",
    "contracts:device:apn:id": 3,
    "contracts:device:apn:name": "Tim",
    "contracts:device:apn:accessPoint": "ibox.tim.it",
    "contracts:device:country:isoCode": "IT",
    "contracts:device:country:prefix": "+39",
    "contracts:livemonitor:id": 37648,
    "contracts:livemonitor:online": 0,
    "contracts:livemonitor:callReason": 0,
    "contracts:livemonitor:disconnectReason": 1,
    "contracts:livemonitor:alarmStatus": 0,
    "contracts:livemonitor:anomaliesStatus": 0,
    "contracts:livemonitor:inputStatus": 0,
    "contracts:livemonitor:outputStatus": 0,
    "contracts:livemonitor:systemStatus": 25,
    "contracts:livemonitor:latitude": 45.66385833333333,
    "contracts:livemonitor:longitude": 8.70681,
    "contracts:livemonitor:speed": 0,
    "contracts:livemonitor:altitude": 245,
    "contracts:livemonitor:direction": 93,
    "contracts:livemonitor:battery": null,
    "contracts:livemonitor:inMovement": 0,
    "contracts:livemonitor:csq": 20,
    "contracts:livemonitor:lastConnectionAt": 8,
    "contracts:livemonitor:lastFixAt": "2015-09-06T11:57:42.000Z",
    "contracts:services:type": 17,
    "contracts:services:expireAt": "2014-09-26T07:20:49.000Z"
  },
  {
    "id": 10,
    "name": "Auto",
    "color": "ff0000",
    "contracts:id": 32599,
    "contracts:alias": "GOLF",
    "contracts:plate": "DC789NW",
    "contracts:vehicleType": 1,
    "contracts:vehicleBrand": "AUDI",
    "contracts:vehicleModel": "A3",
    "contracts:device:id": 47561,
    "contracts:device:enabfun": 20673,
    "contracts:device:enabfun2": 65,
    "contracts:device:enabfun3": 132,
    "contracts:device:enabfun4": 0,
    "contracts:device:dealerId": 1,
    "contracts:device:model:id": 17,
    "contracts:device:model:name": "GT999.16",
    "contracts:device:apn:id": 3,
    "contracts:device:apn:name": "Tim",
    "contracts:device:apn:accessPoint": "ibox.tim.it",
    "contracts:device:country:isoCode": "IT",
    "contracts:device:country:prefix": "+39",
    "contracts:livemonitor:id": 37648,
    "contracts:livemonitor:online": 0,
    "contracts:livemonitor:callReason": 0,
    "contracts:livemonitor:disconnectReason": 1,
    "contracts:livemonitor:alarmStatus": 0,
    "contracts:livemonitor:anomaliesStatus": 0,
    "contracts:livemonitor:inputStatus": 0,
    "contracts:livemonitor:outputStatus": 0,
    "contracts:livemonitor:systemStatus": 25,
    "contracts:livemonitor:latitude": 45.66385833333333,
    "contracts:livemonitor:longitude": 8.70681,
    "contracts:livemonitor:speed": 0,
    "contracts:livemonitor:altitude": 245,
    "contracts:livemonitor:direction": 93,
    "contracts:livemonitor:battery": null,
    "contracts:livemonitor:inMovement": 0,
    "contracts:livemonitor:csq": 20,
    "contracts:livemonitor:lastConnectionAt": 8,
    "contracts:livemonitor:lastFixAt": "2015-09-06T11:57:42.000Z",
    "contracts:services:type": 6,
    "contracts:services:expireAt": null
  }
]
bschwind commented 8 years ago

Not sure if you're still having trouble with this, but I ran into the same bug. From the brief research I did, it seems to be the object-merge library not being able to properly JS Dates, because Date instanceof Object is true, and it uses that to check for sub-objects on an object.

But I worked around this by forcing the node-mysql connection to return dates as strings instead of JS Date objects.

bschwind commented 8 years ago

@davidebettio ^^

arenddeboer commented 8 years ago

Thanks for the tip! \ First day with this library and couldn't figure out why I had duplicates in my result. Turned out to be a NULL DATETIME value. connection option: "dateStrings": true fixed this for me.

edit: I was wrong, still seeing a duplicate, which seems to be related to the null value