ホームページ  >  記事  >  バックエンド開発  >  PHP で json_decode と json_encode を使用する方法を共有する

PHP で json_decode と json_encode を使用する方法を共有する

小云云
小云云オリジナル
2018-03-01 14:05:281413ブラウズ

json_decode と json_encode は両方とも JSON 文字列です。この記事では主に PHP での json_decode と json_encode の使用方法について説明します。

1. json_encode()

この関数は主に配列とオブジェクトを json 形式に変換するために使用されます。まず配列変換の例を見てください:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  echo json_encode($arr); 

結果は

{"a":1,"b":2,"c":3,"d":4,"e":5} 

次にオブジェクト変換の例を見てください:

$obj->body      = 'another post';  $obj->id       = 21;  $obj->approved    = true;  $obj->favorite_count = 1;  $obj->status     = NULL;  
echo json_encode($obj); 

結果は

{    
    "body":"another post",  
  "id":21,  
  "approved":true,  
  "favorite_count":1,  
  "status":null  
  }

json は utf-8 でエンコードされた文字のみを受け入れるため、json_encode のパラメータは() は UTF-8 エンコードである必要があります。それ以外の場合は、空の文字または null が返されます。中国語で GB2312 エンコードを使用する場合、または外国語で ISO-8859-1 エンコードを使用する場合は、この点に特別な注意を払う必要があります。

インデックス付き配列と連想配列

PHPは2種類の配列をサポートしており、1つは「値」(値)のみを格納するインデックス付き配列、もう1つは「名前と値のペア」を格納する配列です。

JavaScriptは連想配列をサポートしていないため、json_encode()はインデックス付き配列のみを配列形式に変換し、連想配列をオブジェクト形式に変換します。

たとえば、今インデックス配列があります

$arr = Array('one', 'two', 'three');  echo json_encode($arr); 

結果は次のようになります:

["one","two","three"]

これを連想配列に変更すると:

$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');echo json_encode($arr); 

結果が変わります:

{"1":"one","2":"two","3":"three"}

データ形式が "[]" (配列) から "{}" に変更されていることに注意してください。 (物体)。

「インデックス配列」を「オブジェクト」に強制する必要がある場合は、

json_encode( (object)$arr ); 

または

json_encode ( $arr, JSON_FORCE_OBJECT ); 
クラス変換

以下は PHP クラスです:

class Foo {  
    const   ERROR_CODE = '404';  
    public  $public_ex = 'this is public';  
    private  $private_ex = 'this is private!';  
    protected $protected_ex = 'this should be protected'; 
   
    public function getErrorCode() {  
      return self::ERROR_CODE;  
    }  
  }

さて、このクラスの JSON 変換の例:

$foo = new Foo;  $foo_json = json_encode($foo);  echo $foo_json; 

出力結果は

{"public_ex":"this is public"}

パブリック変数(public)以外のもの(定数、プライベート変数、メソッドなど)が失われていることがわかります。

2. json_decode()

この関数は、json テキストを対応する PHP データ構造に変換するために使用されます。以下に例を示します:

$json = '{"foo": 12345}';
   $obj = json_decode($json);  print $obj->{'foo'}; // 12345 

通常、json_decode() は常に配列ではなく PHP オブジェクトを返します。例:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));

結果は PHP オブジェクトを生成します:

object(stdClass)#1 (5) {    ["a"] => int(1)    ["b"] => int(2)    ["c"] => int(3)    ["d"] => int(4)    ["e"] => int(5)  
} 

PHP 連想配列の生成を強制したい場合は、json_decode() はパラメーター true:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
 
var_dump(json_decode($json,true)); 

を追加する必要があります:

array(5) {  
   ["a"] => int(1)     ["b"] => int(2)     ["c"] => int(3)     ["d"] => int(4)     ["e"] => int(5)  
} 
結果は連想配列を生成しますarray:
$bad_json = "{ 'bar': 'baz' }";  
$bad_json = '{ bar: "baz" }';  
$bad_json = '{ "bar": "baz", }'; 

json_decode() よくある間違い

次の 3 つの json の書き方はすべて間違っています。どこにエラーがあるかわかりますか?

//由JSON字符串转换为JSON对象var obj = eval('(' + str + ')');

これら 3 つの文字列に対して json_decode() を実行すると、null が返され、エラーが報告されます。

最初の間違いは、JSON 区切り文字では単一引用符ではなく二重引用符の使用のみが許可されていることです。 2 番目の間違いは、JSON の名前と値のペアの「名前」(コロンの左側の部分) は、いかなる場合でも二重引用符で囲む必要があることです。 3 番目のエラーは、最後の値の後にカンマを追加できないことです。

さらに、json はオブジェクトと配列を表すためにのみ使用できます。json_decode() が文字列または値に対して使用された場合は、null が返されます。

3. JavaScriptはjson文字列を使用します

JSON文字列をJSONオブジェクトに変換するメソッド

最初に次のメソッドを使用してJSONオブジェクトに変換します:

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

または

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

または

Alert(obj.name);Alert(obj.sex);

その後、次のように読むことができます:

rrreee

特記事項: obj が元々 JSON オブジェクトである場合、eval() 関数を使用して変換した後でも (複数回変換された場合でも)、JSON オブジェクトのままですが、使用後に問題が発生します。 parseJSON() 関数を使用してそれを処理します (構文例外をスローします)。

関連する推奨事項:

json_decode が php の特殊な疑問符文字を解析できない問題の解決策

PHP が中国語のメソッドをエスケープせずに json_decode を実装する方法の紹介

json_encode と json_decode の違いを比較する🎜🎜

以上がPHP で json_decode と json_encode を使用する方法を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。