以下は、MySQL にアクセスして json_encode で連想配列を JSON に変換して text/plain で返しています。 json.php(MySQLにアクセスして JSONを返す)
<?php header( "Content-Type: text/plain; Charset=utf-8" ); header( "pragma: no-cache" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); header( "Cache-control: no-cache" ); $server = 'localhost'; $db_name = 'lightbox'; $user = 'root'; $password = 'パスワード'; // 接続 $connect = @ new mysqli($server, $user, $password, $db_name); if ($connect->connect_error) { die('Connect Error (' . $connect->connect_errno . ') ' . $connect->connect_error); } // クエリ $result = $connect->query("select * from 社員マスタ where 社員コード = '0001'"); if ( !$result ) { die('クエリーに誤りがあります : ' . $connect->error ); } // 読み出し $row = $result->fetch_array(MYSQLI_BOTH); // 開放 $result->close(); // 接続解除 $connect->close(); print json_encode($row); ?>
MYSQLI_BOTH で行データを読み込んでいるので、結果には 数字をキーとした配列と 文字をキーとした配列が混在しています。 Ruby で パースした場合、JSON 文字列なので、数字のキーは文字列扱いになるので、Ruby でループ処理する場合は、to_s が必要です。 force_encoding("utf-8") は、mechanize で返される文字列が、バイナリなので Ruby に対して文字コードを理解させる必要があります。これは、文字列自体には変更は起こらず、Ruby 内で問題が解決されるようにする処理です。 ここでは、実際の日本語コードは使用されていませんが、一般的に mechanize で返されるページは日本語が含まれたバイナリデータです。ページが UTF-8 ならば、force_encoding("utf-8") を実行します。 ※ json_encode で、JSON_UNESCAPED_UNICODE を使うと、日本語が含まれます json_get.rb
#JSON 経由でデータベースの値を取得 require 'mechanize' agent = Mechanize.new agent.verify_mode = OpenSSL::SSL::VERIFY_NONE agent.follow_meta_refresh = true agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko' page = agent.get("http://localhost/web/various/db_json/json.php") obj = JSON.parse((page.body).force_encoding("utf-8")) i = 0 while i < obj.length / 2 print obj[i.to_s], "\n" i += 1 end print obj["社員コード"],"\n" print obj["氏名"],"\n" print obj["フリガナ"],"\n" print obj["所属"],"\n" print obj["性別"],"\n" print obj["作成日"],"\n" print obj["更新日"],"\n" print obj["給与"],"\n" print obj["手当"],"\n" print obj["管理者"],"\n" print obj["生年月日"],"\n"