[sr-dev] [kamailio/kamailio] jansson: can't extract values from string-only json array (#1171)

Sebastian Damm notifications at github.com
Wed Jun 28 15:39:11 CEST 2017


### Description

I have a json string stored in a variable, and I want to iterate over the values in it. This works if there are integer values in the json string. But if it consists only of string values, jansson_get throws an error.

According to jsonlint, all my json strings are valid.

### Troubleshooting

#### Reproduction

This is the part of kamailio.cfg leading to the error:

```
	# Integer json array
	$var(myIntList) = '[2,3,4,5]';
	xlog("L_INFO", "Integer json string is >>>> $var(myIntList) <<<<");
	jansson_get('[0]', $var(myIntList), "$var(intValue)");
	xlog("L_INFO", "First Int Element: >> $var(intValue) <<");
	jansson_get('[1]', $var(myIntList), "$var(intValue)");
	xlog("L_INFO", "Second Int Element: >> $var(intValue) <<");
	# String json array
	$var(myStringList) = '["foo", "bar", "baz"]';
	xlog("L_INFO", "String json string is >>>> $var(myStringList) <<<<");
	jansson_get('[0]', $var(myStrList), "$var(strValue)");
	xlog("L_INFO", "First Str Element: >> $var(strValue) <<");
	jansson_get('[1]', $var(myStrList), "$var(strValue)");
	xlog("L_INFO", "Second Str Element: >> $var(strValue) <<");
	# Mixed json array
	$var(myMixedList) = '[2, "bar"]';
	xlog("L_INFO", "Mixed json string (int first) is >>>> $var(myMixedList) <<<<");
	jansson_get('[0]', $var(myMixedList), "$var(mixedValue)");
	xlog("L_INFO", "First Mixed Element: >> $var(mixedValue) <<");
	jansson_get('[1]', $var(myMixedList), "$var(mixedValue)");
	xlog("L_INFO", "Second Mixed Element: >> $var(mixedValue) <<");
	$var(myMixedList) = '["bar", 2]';
	xlog("L_INFO", "Mixed json string (string first) is >>>> $var(myMixedList) <<<<");
	jansson_get('[0]', $var(myMixedList), "$var(mixedValue)");
	xlog("L_INFO", "First Mixed Element: >> $var(mixedValue) <<");
	jansson_get('[1]', $var(myMixedList), "$var(mixedValue)");
	xlog("L_INFO", "Second Mixed Element: >> $var(mixedValue) <<");
```

#### Log Messages

This is the output generated by the above kamailio.cfg snippet.

```
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Integer json string is >>>> [2,3,4,5] <<<<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: First Int Element: >> 2 <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Second Int Element: >> 3 <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: String json string is >>>> ["foo", "bar", "baz"] <<<<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: ERROR: jansson [jansson_funcs.c:59]: janssonmod_get(): failed to parse: 0
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: ERROR: jansson [jansson_funcs.c:61]: janssonmod_get(): json error at line 1: '[' or '{' expected near '0'
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: First Str Element: >> 0 <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: ERROR: jansson [jansson_funcs.c:59]: janssonmod_get(): failed to parse: 0
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: ERROR: jansson [jansson_funcs.c:61]: janssonmod_get(): json error at line 1: '[' or '{' expected near '0'
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Second Str Element: >> 0 <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Mixed json string (int first) is >>>> [2, "bar"] <<<<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: First Mixed Element: >> 2 <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Second Mixed Element: >> bar <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Mixed json string (string first) is >>>> ["bar", 2] <<<<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: First Mixed Element: >> bar <<
Jun 28 15:31:12 busch /usr/sbin/kamailio[29961]: INFO: <script>: Second Mixed Element: >> 2 <<
```

### Additional Information

  * **Kamailio Version** - output of `kamailio -v`

```
version: kamailio 5.0.2 (x86_64/linux)
flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: unknown
compiled with gcc 4.9.2
```

* **Operating System**:

Debian Jessie
```
Linux busch.domain 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u1 (2017-02-22) x86_64 GNU/Linux
```


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/1171
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-dev/attachments/20170628/6cac0c3e/attachment-0001.html>


More information about the sr-dev mailing list