Parsing function for a server, using the Jansson library
A few notes:


My first concern with your program is the use of the Jansson library.  Looking at some benchmarks shows me that it is less than stellar. (The Y-axis is parses-per-second. Thus, higher is faster.)



So a new library choice may be in order.  I would highly recommend looking a jsmn. I have yet to find a faster (and more portable!) option out there.  Here is a benchmark for jsmn compared to Jansson (jsmn is 19.28 times faster).

\$ 
\newcommand\T{\Rule{0pt}{1em}{.5em}}
\begin{array}{|c|c|c|c|c|c|}
\hline \textbf{Project} &amp; \textbf{License} &amp; \textbf{API} &amp; \textbf{Neg. tests} &amp; \textbf{Followers} &amp; \textbf{Benchmark} \T \\\hline
  \text{Jansson} \T &amp; \text{MIT} &amp; \text{DOM} &amp; \text{yes} &amp; \dfrac{234}{59} &amp; 25 \text{MB/s}, 52 \text{s} \\\hline
  \text{jsmn} \T &amp; \text{MIT} &amp; \text{custom} &amp; \text{yes} &amp; \dfrac{65}{4} &amp; 482 \text{MB/s}, 2.3 \text{s} \\\hline
\end{array}
\$
You have used the preprocessor to define some oBIX request values.


#define OBIX_REQUEST_INVALID -1
#define OBIX_REQUEST_WATCH 0
#define OBIX_REQUEST_UPDATE 1



You could use an enum here instead.

typedef enum 
{
    INVALID = -1,
    WATCH = 0,
    UPDATE = 1
} ObixRequest;

You can remove any != 0 tests from your if conditions for maximum C-ness.
You sometimes use printf() when you don't have to.


printf("\nInvalid JSON data.\n");



Use puts() for statements like this when you aren't formatting the string.  As a plus, you don't have to include the \n characters.

puts("Invalid JSON data.");