views:

396

answers:

2

I try to manually build a Json string to send to the client.

{'result':'hhh'}

When I use

echo json_encode(array('result'=>'hhh'));

It arrives perfectly. But when I do

echo "{'result':'hhh'}";

It isn't

The only difference I find between the two requests is that the first one has:

Content-Length: 9    header

and the second one (which does not work)

Content-Length: 16   header

Both the strings should have been content length: 16!!! I guess it something to do with the combination of ZF and Mootools.

+1  A: 

It doesn't have problems with UTF-8 so much as UTF-8 is the standard encoding for it. It sounds as if you're echoing something in a different encoding scheme, which breaks, whereas json_encode() is transcoding it for you.

chaos
+2  A: 

According to the specs, JSON requires double quotes around key names and string values.

echo json_encode(array('result'=>'hhh'));

will output

{"result":"hhh"}

The length of this output is 16 bytes as shown by the following:

echo strlen(json_encode(array('result'=>'hhh')));

outputs "16".

Any JSON decoder that follows the specs will fail or throw an exception when presented with your manually echoed JSON.

Elmo
If you will count the characters on my manually string, you will see the problem is something else completely. I need to investigate more, it seems something to do with the combination of ZF and Mootools
Itay Moav
Just did some testing and Elmo is correct. You have to use double quotes, although I did not get an error trying to decode single quotes it was returning nothing.
Erling Thorkildsen