thedevsaddam / gojsonq

A simple Go package for querying over JSON, YAML, XML, and CSV data.
https://github.com/thedevsaddam/gojsonq/wiki
MIT License
2.19k stars 140 forks source link

Getting same results for both `eq` and `neq` clauses #102

Open serpro69 opened 1 year ago

serpro69 commented 1 year ago

data:

{
  "appStatus": {
    "displayName": "JobServer",
    "instanceStatus": {
      "autoRestartSuspended": false,
      "autoRestartSuspendedForApp": false,
      "autoRestartableApp": false,
      "instance": {
        "active": true,
        "applicationDisplayName": "JobServer",
        "applicationId": 42,
        "applicationName": "JobServer",
        "custom": false,
        "id": 10,
        "name": 1,
        "serverName": "xxx"
      },
      "lastStartTime": "2022-11-06 11:53:52",
      "lastStatusChangeTime": "2022-12-14 16:37:31",
      "lastStatusEvent": "Stop",
      "lastStopTime": "2022-12-14 16:37:31",
      "status": "STOPPED"
    },
    "name": "JobServer",
    "numberOfInstancesDown": 1,
    "numberOfInstancesRunning": 0,
    "outageCountInLast24Hrs": 1,
    "pecentageUpInstance": 0,
    "status": "Red",
    "totalNumberOfInstances": 1
  }
}

code:

notStopped := jq.New().File("out.json").
    From("appStatus.instanceStatus").
    Where("status", "neq", "STOPPED")

log.Println(notStoppped)
log.Println(notStopped.Get())

output:

Content: {
  "appStatus": {
    "displayName": "JobServer",
    "instanceStatus": {
      "autoRestartSuspended": false,
      "autoRestartSuspendedForApp": false,
      "autoRestartableApp": false,
      "instance": {
        "active": true,
        "applicationDisplayName": "JobServer",
        "applicationId": 42,
        "applicationName": "JobServer",
        "custom": false,
        "id": 10,
        "name": 1,
        "serverName": "xxx"
      },
      "lastStartTime": "2022-11-06 11:53:52",
      "lastStatusChangeTime": "2022-12-14 16:37:31",
      "lastStatusEvent": "Stop",
      "lastStopTime": "2022-12-14 16:37:31",
      "status": "STOPPED"
    },
    "name": "JobServer",
    "numberOfInstancesDown": 1,
    "numberOfInstancesRunning": 0,
    "outageCountInLast24Hrs": 1,
    "pecentageUpInstance": 0,
    "status": "Red",
    "totalNumberOfInstances": 1
  }
}

Queries:[[{status eq STOPPED}]]

2022/12/14 20:48:31 map[autoRestartSuspended:false autoRestartSuspendedForApp:false autoRestartableApp:false instance:map[active:true applicationDisplayName:JobServer applicationId:42 applicationName:JobServer custom:false id:10 name:1 serverName:xxx] lastStartTime:2022-11-06 11:53:52 lastStatusChangeTime:2022-12-14 16:37:31 lastStatusEvent:Stop lastStopTime:2022-12-14 16:37:31 status:STOPPED]

Changing where to eq produces exactly same output. I would think that neq should return an empty map instead?

Another test with neq:

notStopped := jq.New().File("out.json").
    From("appStatus").
    From("instanceStatus.instance").
    Where("name", "!=", 1)

Returns:

map[active:true applicationDisplayName:JobServer applicationId:42 applicationName:JobServer custom:false id:10 name:1 serverName:xxx]

So it would appear that neq and != do not work as expected?

Any help in getting this working? Am I doing smth wrong?

PS: is this lib maintained? Seems like not much activity going on lately.