From the context of data - JSON is not a string. It represents data in Key-Value pairs. It follows it's own validation strategy. It has it's own set of rules.
If your context is about how it's transmitted over the network, HTTP usually converts it to a raw string as specified by @samuel-toh.
Even in your code (if you're using let's say Javascript) you can convert it to a string by calling:
JSON.stringify(yourJSONObject);
And can convert it back to programmable Javascript Object by calling:
JSON.parse(stringifiedJSON);
So to answer your question:
No, JSON is not a string. It's a data structure.
EDIT:
Please don't confuse between Javascript Object and JSON. They're different. The methods I have specified above take Javascript Object as parameter. What I am trying to imply in my answer is JSON is a language agnostic data-interchange format. (This is not my statement, it's found here.)
There are several differences in JSON and Javascript Object, like @t-niese pointed out, Javascript Objects can have functions as values. And a valid Javascript Object can be an invalid JSON, although a valid JSON will be a valid Javascript Object. Pardon me if I created any confusion.