Keep it civil, do not flame or bait other users. If you notice anything illegal or inappropriate being discussed, contact an administrator or moderator.
Yes, it should be that way. > and < are proper HTML encoding for greater-than and less-than symbols. Leaving them unencoded in the JSON can cause problems. You'll run into that with a lot of other special characters too. You will need to decode special characters yourself. Almost all programming languages have this built in in one way or another.
It doesn't work in reverse because URL's use a different encoding method from HTML. While with < and > it isn't as necessary as with certain other special characters, those are usually encoded in URL's as well as %3C and %3E respectively. If you request "%3E_%3C, it will load as expected. Your browser will likely even automatically display it as ">_<", and when you request ">_<" instead of "%3E_%3C", your browser will usually automatically encode the < and > as well in the actual request.
I always thought you only have to deal with ' and " in json strings and tag attributes, while doing htmlspecialchars only when data is outside tags in XML/HTML and urlencode for URL GET values. I suppose everyone has his own ways to deal with data.
Wish you'd have a proper API documentation (at least I failed to find it). Had to learn many things the hard way.
That's a known issue. For some reason linebreaks (and tabs, and em/en-spaces, etc) don't get converted into spaces before being saved. Since we escape everything input by users, it ends up getting converted to that and stuck to the adjacent tag in the database.