&tag(JSON);
*目次 [#kb8cdf46]
#contents
*参考情報 [#ba347d3f]
-[[教えて!Ziddyちゃん - JSONエンコードの際の問題:http://ziddy.japan.zdnet.com/qa5242653.html]]

*基本 [#se9407b6]
**UNICODEエスケープ [#oa60adb5]
-JSONに含まれる日本語文字列はUTF-8。
-UTF-8を「UNICODEエスケープ」(\u672c\u65e5\u306f\u6674\u5929\u306a\u308aのような文字列)してやりとりするのが正しい?
-しかしRuby用のJSONライブラリでは生のUTF-8が使われているようだが…
-[[JavascriptのUnicodeをescape/unescape - OVERT MEMO:http://d.hatena.ne.jp/cesar/20070401/p1]]

*POSTする [#ne510f76]
**Rubyを使ってPOSTする [#j0097d35]
-[[Twitterのuser_timelineから新着発言を取得して別サーバにPOST - m-kawato@hatena_diary:http://d.hatena.ne.jp/m-kawato/20100419/1271691947]]
*PHP [#qdf1ab6a]
[[PHPでJSON - Do You PHP?:http://www.doyouphp.jp/sample/sample_xml_json.shtml]]よりphp5.3の場合は次のようにすればいいらしい。文字化けしたので最初のheader行を追加した。

#pre{{
<?php header("Content-Type: text/html; charset=UTF-8"); ?>

<?php
echo '<pre>';
$val = array("abc" => 12,
             "foo" => "bar",
             "bool0" => false,
             "bool1" => true,
             "arr" => array(1, 2, 3, null, 5),
             "float" => 1.2345,
             "hoge" => mb_convert_encoding('ほげほげ', 'utf-8', mb_internal_encoding())
            );
$output = json_encode($val);
echo 'encoded=' . $output . '<br>';

$decoded = json_decode($output);
var_dump($decoded);
echo mb_convert_encoding($decoded->hoge, mb_internal_encoding(), 'utf-8');
?>
</pre>
<hr>
<?php
    show_source($_SERVER['SCRIPT_FILENAME']);
?>
}}

次のように出力される。
#pre{{
encoded={"abc":12,"foo":"bar","bool0":false,"bool1":true,"arr":[1,2,3,null,5],"float":1.2345,"hoge":"\u307b\u3052\u307b\u3052"}
object(stdClass)#1 (7) {
  ["abc"]=>
  int(12)
  ["foo"]=>
  string(3) "bar"
  ["bool0"]=>
  bool(false)
  ["bool1"]=>
  bool(true)
  ["arr"]=>
  array(5) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(3)
    [3]=>
    NULL
    [4]=>
    int(5)
  }
  ["float"]=>
  float(1.2345)
  ["hoge"]=>
  string(12) "ほげほげ"
}
ほげほげ
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS