Jsonデータ形式は、クライアントとサーバー間で構造化されたデータの転送を容易にするために作成されました。
配列やオブジェクトをJsonに変換するために、PHPには json_encode
という関数があります。
$user = ['名前' => 'ヤン','苗字' => 'バラセック','役割' => ['管理者','モデレーター',],];echo json_encode($user);
生み出すだろう。
{"name":"Jan","surname":"Barasek","role":["admin","moderator"]}
json_encode() 関数は他のデータ型も変換することができます。例えば、
integer (整数)、
string` (文字列) などを直接挿入することができる。
デフォルトの設定では、jsonは1つの長い文字列として生成されます。これは、なるべく場所を取らないようにするためです。
もし、より良い可読性を求めるのであれば、2番目のパラメータとして JSON_PRETTY_PRINT
定数を渡せばよいでしょう。
echo json_encode($users, JSON_PRETTY_PRINT);
生み出すだろう。
{"名前": "ヤン","苗字": "バラセック","役割": ["管理者","モデレーター"]}
PHPによる通常のjsonの書式設定には追加設定がなく、この出力のみで解決する必要があります。例えば、スペースではなくタブをインデントしたい場合(あるいは何らかの方法で生成規則を変更したい場合)、自分でプログラムしなければならない。
この関数はすでに基本的な書式設定を行うことができるので、あとはそれを修正するだけです。
function prettyJsonPrint(string $json): string{$result = '';$level = 0;$in_quotes = false;$in_escape = false;$ends_line_level = NULL;$json_length = strlen($json);for ($i = 0; $i < $json_length; $i++) {$char = $json[$i];$new_line_level = NULL;$post = '';if ($ends_line_level !== NULL) {$new_line_level = $ends_line_level;$ends_line_level = NULL;}if ($in_escape) {$in_escape = false;} else if ($char === '"') {$in_quotes = !$in_quotes;} else if (!$in_quotes) {switch ($char) {case '}':case ']':$level--;$ends_line_level = NULL;$new_line_level = $level;break;case '{':case '[':$level++;case ',':$ends_line_level = $level;break;case ':':$post = '';break;case "":case "\t":case "\n":case "\r":$char = '';$ends_line_level = $new_line_level;$new_line_level = NULL;break;}} else if ($char === '\\') {$in_escape = true;}if ($new_line_level !== NULL) {$result .= "\n" . str_repeat("\t", $new_line_level);}$result .= $char . $post;}return $result;}
提供元:https://stackoverflow.com/questions/6054033/pretty…
例えば、入力。
{"キー1":[1,2,3],"キー2":"価値"}
としてフォーマットされています。
{"キー1": [1,2,3],"キー2": "価値"}
というのは、各要素のインデントが統一されているため、より読みやすくなっています。
キーやデータそのもの、個々の書式要素(特に閉じ括弧)に色を付けると便利な場合があります。
例えば、入力。
{"アクセス": {"トークン": {"issued_at": "2008-08-16T14:10:31.309353", "ぜついん": "2008-08-17T14:10:31Z", "アイド": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"}, "サービスカタログ": [], "ユーザー": {"ユーザー名": "エイジェイ", "ロールリンク": [], "アイド": "16452ca89", "やくまわり": [], "名前": "エイジェイ"}}}
としてフォーマットされています。
{<br
"access": {
」となります。
"token": {
」となります。
"issued_at": "2008-08-16T14:10:31.309353",
"expires": "2008-08-17T14:10:31Z",
<br
"id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"
は。
},
。
"serviceCatalog": [
].
],
。
"user": {
」のようになります。
"username": "ajay",
"username"</span
"roles_links": [
].
],
。
: "16452ca89",
、。
「役割」: [
][
][
][
]。
],
。
「名前」: "ajay"
「名前」</span
}<br
}
。
}
これは、以下のような機能で実現できます。
function jsonColorFormater(string $json, string $indentation = "\t"): string{$crl = 0;$ss = false;$buffer = '';for ($c = 0; $c < strlen($json); $c++) {if ($json[$c] == '}' || $json[$c] == ']') {$crl--;$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && (@$json[$c - 1] == ',' || @$json[$c - 2] == ',')) {$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && !$ss) {$buffer .= '<span style="color:'.((@$json[$c - 1] == ':' || @$json[$c - 2] == ':') ? '#35D' : '#C22').';">';}$buffer .= $json[$c];if ($json[$c] == '"' && $ss) $buffer .= '</span>。';if ($json[$c] == '"') $ss = !$ss;if ($json[$c] == '{' || $json[$c] == '[') {$crl++;$buffer .= "\n". str_repeat($indentation, $crl);}}// HTMLソースを返すreturn '<pre>' . $buffer . '</pre> <pre>';}// これを呼び出すだけで、フォーマットされた出力が返される// echo jsonColorFormater($data, ' ');
https://stackoverflow.com/a/20953262/6777550 から引用し、根本的に書き直した機能です。
これは、json_decode()関数で実装でき、オブジェクトとして扱う必要のあるJsonからデータ構造を作ることができます。
$json = '{name": "Jan", "surname": "Barasek", "role": ["admin", "moderator"]}.';$decode = json_decode($json);echo $decode->name; // 'Jan'を返します。// echo $decode->role;//// プロパティロールのため、これは不可能です// 配列を含むので、反復処理する必要があります。echo '<ul>';foreach ($decode->role as $role) {echo '<li>。' . $role . '</li>。'; // 箇条書きの後ろに役割を連続的に並べる}echo '</ul> </p';
例えば、jQueryライブラリでは、json文字列は非常に簡単にオブジェクトにパースすることができます。
var json = '{name": "Jan", "surname": "Barasek", "role": ["admin", "moderator"]}.';var parser = $.parseJSON(json);document.write('名前' + parser.name);console.log(parser); // デバッグのため、オブジェクト全体をコンソールに出力する
javascriptでは、一般的に、どんなjsonも有効なjavascriptオブジェクトであり、直接操作したり、そのプロパティにアクセスしたりすることができます。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | ja