Unable to decode JSON value in PHP

I did not find a solution for this.

I have an API that gives me JSON resposne,

http://api.vajehyab.com/v2/public/?q=%D8%B3%D9%84%D8%A7%D9%85&developer=stackoverflow

something like that,

{"search": {"d": "\ u0633 \ u0644 \ u0627 \ u0645", "code": 200}, "data": {"Name": "\ u0633 \ u0644 \ u0627 \ u0645", "pronunciation ":", "text": "(\ u0633 \ u064e) [\ u0639.] (\ u0645 \ u0635 \ u0644.) 1 - \ u062f \ u0631 \ u0648 \ u062f \ u06af \ u0641 \ u062a \ u0646. 2 - \ u0628 \ u06cc \ u06af \ u0632 \ u0646 \ u062f \ u0634 \ u062f \ u0646. 3 - \ u06af \ u0631 \ u062f \ u0646 \ u0646 \ u0647 \ u0627 \ u062f \ u0646. \ U061b ~ \ u0639 \ u0644 \ u06cc \ u06a9 \ u062f \ u0631 \ u0628 \ u062f \ u0628 \ u06310 \ u0627 \ u062f. \ u061b ~ \ u0639 \ u0644 \ u06cc \ u06a9 \ u0645 \ u062f \ u0631 \ u0648 \ u062f \ u0628 \ u0631 \ u0634 \ u0645 \ u0627. "," source ":" \ u0641 \ u0631 \ u0647 \ u0646 \ u06af \ u0641 \ u0627 \ u0631 \ u0633 \ u06cc \ u0645 \ u0639 \ u06cc \ u0646 | u0648 \ u0627 \ u0698 \ u0647 \ u06cc \ u0627 \ u0628 "," permalink ":"? q =% D8% B3% D9% 84% D8% A7% D9% 85 "}," error ": {" message ":" "," reason ":" "}," advertisement ": {" text ": "," URL ":" "}}

I don't seem to have a problem, I can decode it in other tools, but PHP, I can not decode it in PHP

$json = file_get_contents('http://api.vajehyab.com/v2/public/?q='.urlencode('سلام').'&developer=stackoverflow');
var_dump(json_decode($json)); // null

I hope someone can help me with this, thanks ...

+4
source share
5 answers

Taken from php docs http://php.net/manual/bg/function.json-last-error.php Run this code and let us know if you get any errors.

json_decode($string);

switch(json_last_error())
{
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
}
+3
source

EDIT2: In PHP 5.3+, this also works:

$json = file_get_contents('http://api.vajehyab.com/v2/public/?q='.urlencode('سلام').'&developer=stackoverflow');

$unescaped = json_encode(preg_replace_callback('/\\\\u(\w{4})/', function ($matches) {
    return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT, 'UTF-8');
}, $json));
var_dump($unescaped);

Taken from: fooobar.com/questions/1595796 / ...

EDIT3: wrap preg_replace_callbackinjson_encode

+2
source

, .

echo htmlentities((string)$results); 

reffer json_decode PHP

0

, file_get_contents. json_decode , . .

$json = '{"search":{"q":"\u0633\u0644\u0627\u0645","code":200},"data":{"title":"\u0633\u0644\u0627\u0645","pronunciation":"","text":"(\u0633\u064e) [ \u0639 . ] (\u0645\u0635 \u0644 .) 1 - \u062f\u0631\u0648\u062f \u06af\u0641\u062a\u0646 . 2 - \u0628\u06cc \u06af\u0632\u0646\u062f \u0634\u062f\u0646 . 3 - \u06af\u0631\u062f\u0646 \u0646\u0647\u0627\u062f\u0646 . \u061b ~ \u0639\u0644\u06cc\u06a9 \u062f\u0631\u0648\u062f \u0628\u0631 \u062a\u0648 \u0628\u0627\u062f. \u061b ~ \u0639\u0644\u06cc\u06a9\u0645 \u062f\u0631\u0648\u062f \u0628\u0631 \u0634\u0645\u0627. ","source":"\u0641\u0631\u0647\u0646\u06af \u0641\u0627\u0631\u0633\u06cc \u0645\u0639\u06cc\u0646 | \u0648\u0627\u0698\u0647 \u06cc\u0627\u0628","permalink":"?q=%D8%B3%D9%84%D8%A7%D9%85"},"error":{"message":"","reason":""},"ads":{"text":"","url":""}}';
var_dump(json_decode($json));
0

Please encode your data in utf8 format before encoding via json_encode () php function. I hope this helps. [Utf8_encode ()]

0
source

All Articles