getJSON() is a description of the request, then
redux-observable is still declarative. Describing a side-effect in the middle of the data flow, rather than the edge, isn’t what makes code declarative vs. imperative. How & where RO & Cycle.js handle side effects is quite different, but they both describe the data flow.
To put it another way, if you were writing in a pure functional language and composed a chain of functions, and one of those functions created an IO monad that you mapped over its result to do some additional processing of the data, it would still be declarative.