I'm about to lose my mind working with jq for the first time today. I've tried every ever so dirty way to make this work somehow. Let's get down to business:

I'm trying to further develop the pretty barebones API for Unifi Controllers for some use cases:
<https://dl.ui.com/unifi/6.0.41/unifi_sh_api>

Here's some mock up data (the real json data is thousands of lines):

```
{
  "meta": {
    "rc": "ok"
  },
  "data": [
    {
      "_id": "61a0da77f730e404af0edc3c",
      "ip": "10.19.31.120",
      "mac": "ff:ec:ff:89:ff:58",
      "name": "Test-Accesspoint"
    }
  ]
}

```

Here is my advancedapi.sh

```
#!/bin/bash
source unifiapi.sh
unifi_login 1>dev/null

if [ "$1" ];
then
command=$1
shift
else
echo "Please enter command"
exit
fi
#jq -r '.data[] | "\(.name),\(.mac)"'

assembleKeys(){
c="0"
seperator=";"
keys=$(for i in "$@"
do
        c=$(expr $c + 1)
        if [ $c -gt 1 ];
        then
                echo -n "${seperator}\(.${i})"
        else
                echo -n "\(.${i})"
        fi
done
echo)
}

assembleJQ(){
c=0
jq=$(echo -en 'jq -r -j \x27.data[] | '
for i in "$@"
do
        if [ "$c" != "0" ];
        then
        echo -en ",\x22 \x22,"
        fi
c=1
echo -en ".$i"
done
echo -en ",\x22\\\n\x22\x27")
echo "$jq"
}

getDeviceKeys(){
assembleJQ "$@"

#unifi_list_devices | jq -r '.data[]' | jq -r "${keys}"
#export keys=mac
#export second=name
#unifi_list_devices | jq -r -j --arg KEYS "$keys" --arg SECOND "$second" '.data[] | .[$KEYS]," ",.[$SECOND],"\n"'

unifi_list_devices | $jq
#unifi_list_devices | jq -r -j '.data[] | .mac," ",.name,"\n"'
}

"$command" $@

```

Users should be able to call any function from the API with as many arguments as they want.
So basically this:

```
#export keys=mac
#export second=name
#unifi_list_devices | jq -r -j --arg KEYS "$keys" --arg SECOND "$second" '.data[] | .[$KEYS]," ",.[$SECOND],"\n"'

```

which works, but only with a limited number of arguments. I want to pass $@ to jq.

I'm trying to get the name and mac-address of a device by calling:

```
./advancedapi.sh getDeviceKeys mac name

```

this should return the mac-address and name of the device. But it only gives me this:

```
jq -r -j '.data[] | .mac," ",.name,"\n"'
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
'.data[]
jq: 1 compile error

```

The top-most line being the jq command, which works perfectly fine when called manually.

The assembleKeys function was my attempt at generating a string that looks like this:

```
jq -r '.data[] | "\(.name),\(.mac)"'

```

Can anyone explain to me, preferably in-depth, how to do this? I'm going insane here!

Thanks!