2017-07-07 5 views
0
私はAPIのクライアントを書いている

...Zend Json Json :: decode(...)を使用してPHPでUnicodeエンコードされたJSONをデコードする方法は?

use Zend\Http\Client; 
use Zend\Http\Request; 
use Zend\Json\Json; 
... 
$request = new Request(); 
$request->getHeaders()->addHeaders([ 
    'Accept-Charset' => 'UTF-8', 
    'Accept' => 'application/hal+json', 
    'Content-Type' => 'application/hal+json; charset=UTF-8', 
]); 
$apiAddress = 'http://my.project.tld/categories'; 
$request->setUri($apiAddress); 
$request->setMethod('GET'); 
$client = new Client(); 
$response = $client->dispatch($request); 
$data = $response->getContent(); 

...とは、Unicodeは、次のようにJSONをエンコードます:

...{"id":"7","title":"\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438","short_name":"\u0418\u041b\u041b\u042e\u0421\u0422\u0420\u0410\u0426\u0418\u0418"... 

まず、私はjson_decode(...)でそれを解読しようとしました。しかし、私はこれをPHPで(疑わしい正規表現ベースのアプローチなしに)行う適切な方法を見つけられませんでした。

は今、私はZend\Json\Json::decode(...)でそれをしようと、次のエラーを取得しています:

/var/www/path/to/project/vendor/zendframework/zend-json/src/Json.php:243 
Decoding failed: Syntax error 

UnicodeでエンコードされたJSONはZend\Jsonとデコードを取得する方法は? JSONが壊れていることだけで通知


EDIT

、。それは2つの部分に分かれています。文字列は1f9eで始まり、次に最初の部分、次に文字列\u043、次に2番目の内容部分、次に0で始まります。

1f9e <-- What is it? 
{"_li... 
\u043 <-- What is it? 
1a6... 
tfoli <-- What is it? 
0 
+0

あなたはJSONが有効であることを確認していますか? –

+0

私も郵便配達員と一緒にそれをテストしました。だから、はい、私はそれが有効であることを確信できると思います。しかし、コード化される。 – automatix

+0

お待ちください、多分あなたは正しいです。 Postmanの "pretty"ビューからのAPIコールの出力を 'Json :: decode(...)'に置くだけです。それから私は "生の"ビューから同じ出力を入れます。私はそれがうまくいかないと思った。しかし実際にはうまくいっています。ですから、Zend \ Http \ Response#getContent()から取得したJSONには本当に問題があるようです。 – automatix

答えて

1

ZF2の成分を使用してください。これは、ユニコード文字をデコードする、Decoder::decodeUnicodeString()という静的メソッドを持っています。

スクリプトhereをご覧ください。

これがあなたを助けてくれることを願っています!

+0

ありがとうございました! +1しかし実際問題は私の場合、壊れたJSONにあります。詳細については、[この質問](https://stackoverflow.com/q/44978260/2019043)を参照してください。 – automatix

0

私が見るとすぐに、このjsonは壊れていないようです。次のコード行を検討してください:

$data = '{"id":"7","title":"\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438","short_name":"\u0418\u041b\u041b\u042e\u0421\u0422\u0420\u0410\u0426\u0418\u0418"}'; 

$json = json_decode($data); 

header('Content-Type: text/html; charset=utf-8'); 
echo $json->title; 
echo "<br/>"; 
echo $json->short_name; 

結果は次のとおりです。

иллюстрации 
ИЛЛЮСТРАЦИИ 
+0

ご回答ありがとうございますが、私の質問では** EDIT **、[この質問](https://stackoverflow.com/q/44978260/2019043)をご覧ください。 JSON自体は問題ありませんが、最初と最後にいくつかのシンボルが追加されています。これらの追加文字列の間のJSONは実際に有効です。しかし、すべて一緒に無効なJSON文字列を与えます。 – automatix

関連する問題