62

Im trying to pass a mulitidimensional Javascript array to another page on my site by:

  • using JSON.stringify on the array

  • assigning the resultant value to an input field

  • posting that field to the second page

  • using json_decode on the posted value

  • then var_dump to test

  • (echo'ing the posted variable directly just to see if it came through at all)

Javascript on page one:

var JSONstr = JSON.stringify(fullInfoArray); document.getElementById('JSONfullInfoArray').value= JSONstr; 

php on page two:

$data = json_decode($_POST["JSONfullInfoArray"]); var_dump($data); echo($_POST["JSONfullInfoArray"]); 

The echo works fine but the var_dump returns NULL

What have I done wrong?


This got me fixed up:

$postedData = $_POST["JSONfullInfoArray"]; $tempData = str_replace("\\", "",$postedData); $cleanData = json_decode($tempData); var_dump($cleanData); 

Im not sure why but the post was coming through with a bunch of "\" characters separating each variable in the string

Figured it out using json_last_error() as sugested by Bart which returned JSON_ERROR_SYNTAX

1
  • 1
    A little bit HTML of the form would help too. Look into the request using your browser's inspector, do you see what you expect? Commented Apr 13, 2013 at 9:33

7 Answers 7

65

When you save some data using JSON.stringify() and then need to read that in php. The following code worked for me.

json_decode( html_entity_decode( stripslashes ($jsonString ) ) ); 

Thanks to @Thisguyhastwothumbs

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks this is work for me!!! ... In $request["reporthead"] data as string which is from javascript $tempData = \html_entity_decode(stripslashes ($request["reporthead"])); $reportheaddata = json_decode($tempData, true);
35

When you use JSON stringify then use html_entity_decode first before json_decode.

$tempData = html_entity_decode($tempData); $cleanData = json_decode($tempData); 

1 Comment

worth noting in wp I used the above with stripslashes within the html_entity_decode to make work :
27

You'll need to check the contents of $_POST["JSONfullInfoArray"]. If something doesn't parse json_decode will just return null. This isn't very helpful so when null is returned you should check json_last_error() to get more info on what went wrong.

Comments

11

None of the other answers worked in my case, most likely because the JSON array contained special characters. What fixed it for me:

Javascript (added encodeURIComponent)

var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray)); document.getElementById('JSONfullInfoArray').value = JSONstr; 

PHP (unchanged from the question)

$data = json_decode($_POST["JSONfullInfoArray"]); var_dump($data); echo($_POST["JSONfullInfoArray"]); 

Both echo and var_dump have been verified to work fine on a sample of more than 2000 user-entered datasets that included a URL field and a long text field, and that were returning NULL on var_dump for a subset that included URLs with the characters ?&#.

2 Comments

I also had to use urldecode on PHP for it to work properly.
As @Albion points out, the string needs to be URI decoded before json_decode is invoked. json_decode(urldecode($_POST["JSONfullInfoArray"]));
8
stripslashes(htmlspecialchars(JSON_DATA)) 

1 Comment

I am not sure why htmlspecialchars() must there. It will convert the quote character ( " ) to " which is mean can't be processed by json_decode(). I am sure JSON format must be something like {"key":"value"}, but by using htmlspecialchars() it will convert to {"key":"value"} how come json_decode() processing it?
3
jsonText = $_REQUEST['myJSON']; $decodedText = html_entity_decode($jsonText); $myArray = json_decode($decodedText, true);` 

Comments

0

I don't how this works, but it worked.

$post_data = json_decode(json_encode($_POST['request_key'])); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.