Array ( [0] => Array ( [名前] => a1 [番号] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [名前] => a1 [番号] => 000 [QQNo] ) [2] => a1 [番号] => 123 => 000 [QQNo] => ) )
json_decode($data,true) が連想配列を出力することがわかります。このことから、json_decode($data) がオブジェクトを出力し、json_decode("$arr",true) が PHP 連想配列を生成することがわかります。 .
2.json_encode()
json_encode
(PHP 5 >= 5.2.0、PECL json >= 1.2.0)
json_encode — JSON エンコード変数
バグを報告する 説明
string json_encode (mixed $value [, int $options = 0 ] )
JSON 形式の値を返します
バグパラメータを報告する
価値
エンコードされる値は、リソースタイプを除く任意のデータタイプにすることができます
この関数は UTF-8 でエンコードされたデータのみを受け入れることができます
オプション
次の定数で構成されるバイナリ マスク: JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS、JSON_NUMERIC_CHECK、JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、JSON_FORCE_OBJECT、JSON_UNESCAPED_UNICODE。
戻り値のバグを報告する
成功した場合は JSON 形式の文字列表現を返し、失敗した場合は FALSE を返します。
バグを報告する ログを更新する
バージョンの説明
5.4.0 オプション パラメータには、定数 JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、および JSON_UNESCAPED_UNICODE が追加されます。
5.3.3 options パラメータは定数 JSON_NUMERIC_CHECK を追加します。
5.3.0 オプションパラメータを追加します。
バグの例を報告する
例 #1 json_encode() の例
コードは次のとおりです |
コードをコピー |
$arr = 配列 ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
エコー json_encode($arr);
?>
上記のルーチンは次のように出力します:
{"a":1,"b":2,"c":3,"d":4,"e":5}
例 #2 json_encode() 関数での options パラメーターの使用法
$a = array('',"'bar'",'"baz"','&blong&', "xc3xa9");
echo "通常: "、json_encode($a)、"n";
echo "タグ: "、json_encode($a、JSON_HEX_TAG)、"n";
echo "Apos: "、json_encode($a、JSON_HEX_APOS)、"n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "n";
echo "アンプ: "、json_encode($a、JSON_HEX_AMP)、"n";
echo "Unicode: "、json_encode($a、JSON_UNESCAPED_UNICODE)、"n";
echo "すべて: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "nn";
$b = 配列();
echo "空の配列を配列として出力: ", json_encode($b), "n";
echo "空の配列をオブジェクトとして出力: ", json_encode($b, JSON_FORCE_OBJECT), "nn";
$c = 配列(配列(1,2,3));
echo "非連想配列を配列として出力: ", json_encode($c), "n";
echo "非連想配列をオブジェクトとして出力: ", json_encode($c, JSON_FORCE_OBJECT), "nn";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "連想配列は常にオブジェクトとして出力されます: ", json_encode($d), "n";
echo "連想配列は常にオブジェクトとして出力されます: ", json_encode($d, JSON_FORCE_OBJECT), "nn";
?>
上記のルーチンは次のように出力します:
通常: ["","'bar'",""baz"","&blong&","u00e9"]
タグ: ["u003Cfoou003E","'bar'",""baz"","&blong&","u00e9"]
アポス: ["","u0027baru0027",""baz"","&blong&","u00e9"]
引用: ["","'bar'","u0022bazu0022","&blong&","u00e9"]
アンプ: ["","'bar'",""baz"","u0026blongu0026","u00e9"]
Unicode: ["","'bar'",""baz"","&blong&","é"]
すべて: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","é"]
空の配列を配列として出力: []
空の配列をオブジェクトとして出力: {}
非連想配列の配列としての出力: [[1,2,3]]
オブジェクトとしての非連想配列出力: {"0":{"0":1,"1":2,"2":3}}
連想配列は常にオブジェクトとして出力されます: {"foo":"bar","baz":"long"}
連想配列は常にオブジェクトとして出力されます: {"foo":"bar","baz":"long"}
|
例 #3 連続配列と非連続配列の例
コードは次のとおりです |
コードをコピー |
エコー「連続配列」.PHP_EOL
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$シーケンシャル、
json_encode($sequential)
);
echo PHP_EOL."非連続配列".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$ノンシーケンシャル、
json_encode($nonsequential)
);
echo PHP_EOL."連続配列値の削除によって生成された非連続配列を削除します".PHP_EOL;
unset($sequential[1]);
var_dump(
$シーケンシャル、
json_encode($sequential)
);
?>
上記のルーチンは次のように出力します:
|
コードは次のとおりです
コードをコピー
| 連続配列
配列(4) { |
[0]=>
文字列(3) "foo"
[1]=>
文字列(3) "バー"
[2]=>
文字列(3) "バズ"
[3]=>
文字列(5) "長い"
}
string(27) "["foo","bar","baz","blong"]"
非連続配列
配列(4) {
[1]=>
文字列(3) "foo"
[2]=>
文字列(3) "バー"
[3]=>
文字列(3) "バズ"
[4]=>
文字列(5) "長い"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"
連続配列値を削除することで生成された非連続配列を削除します
配列(3) {
[0]=>
文字列(3) "foo"
[2]=>
文字列(3) "バズ"
[3]=>
文字列(5) "長い"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"
$obj->名前= 'a1';$obj->番号='123';
$obj->Contno= '000';
echo json_encode($obj);
結果は次のとおりです:
{"名前":"a1",
「番号」:「123」、
"コントノ":"000"
}
json_encode() と json_decode() はコンパイルおよび逆コンパイルのプロセスであることがわかります。json は utf-8 でエンコードされた文字のみを受け入れるため、json_encode() のパラメーターは utf-8 でエンコードされている必要があります。そうしないと空の文字が取得されます。またはnull
中国語の場合は注意してください
オンラインで解決策を見つけました: |
コードは次のとおりです
コードをコピー
/* json_encode の中国語文字化けを処理します */
$data = array ('game' => '火と氷の国', 'name' => '茨の精霊', 'country' => '霜の国', 'level' =>
| );
エコー json_encode ( $data );
エコー " ";
$newData = 配列 ();
foreach ( $data as $key => $value ) {
$newData [$key] = urlencode ($value );
} |
echo urldecode ( json_encode ( $newData ) );
?>
後で他の人にアドバイスを求めたところ、base64エンコーディングも使用できますが、Baiduは次のように説明しました。
標準 Base64 は、URL での直接送信には適していません。これは、URL エンコーダーが標準 Base64 の「/」と「+」文字を「%XX」の形式に変更し、これらの「%」文字が保存時に含まれるためです。 ANSI SQL では「%」記号がワイルドカード文字として使用されているため、データベースに変換する必要があります。
ただし、私のデータは POST 経由で送信され、HTTP ヘッドではなくメッセージ本文にあるため、影響を受けません。
json_encode は utf-8 形式のデータのみを受け入れることができます
例: json_encode 処理後、「Xu」は「u80e5」になり、最終的な json の中国語部分は Unicode エンコーディングに置き換えられます。私たちが解決しなければならないのは、オブジェクトを json に変換し、オブジェクト内の中国語が json 内で通常の中国語として表示されるようにすることです。json_encode を使用するだけでは目標を達成できないようです。
私の解決策:最初にクラス内の中国語フィールドをURLエンコード(urlencode)し、次にオブジェクトをJSONエンコード(jsonencode)し、最後にJSON、つまり最後のJSONをURLデコード(urldecode)します。内部の中国語は依然として同じ中国語です!
テストコードは次のとおりです:
コードは次のとおりです |
コードをコピー |
クラス myClass {
パブリック $item1 = 1;
パブリック $item2 = '中国語';
関数 to_json() {
//URL エンコード、中国語を Unicode に変換する json_encode を回避します
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
// URL をデコードし、オブジェクト属性が変更されないように JSON に変換した後に各属性を返します
$this->item2 = urldecode($this->item2);
urldecode($str_json)を返します
}
}
$c = 新しい myClass();
エコー json_encode($c);
エコー ' ';
エコー $c->to_json();
エコー ' ';
エコー json_encode($c);
エコー ' ';
echo json_encode('襥');
?>
プログラム出力結果:
{"アイテム1":1,"アイテム2":"u4e2du6587"}
{"item1":1,"item2":"中文"}
{"アイテム1":1,"アイテム2":"u4e2du6587"}
「u80e5」
http://www.bkjia.com/PHPjc/632210.html www.bkjia.com
| true
http://www.bkjia.com/PHPjc/632210.html |
技術記事 この記事では、php での json_decode() と json_encode() の使用方法と、漢字が表示されない場合の解決策を紹介します。 php 1.jsのjson_decode()とjson_encode()...
|