-2

json_encodeオブジェクト指向の PHPを使用して、次の json データをコーディングするにはどうすればよいですか。

var datasets = {
  "usa": {
    label: "USA",
    data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
  }

  // skipped other data
}   

私はオブジェクト指向の PHP と json エンコーディングに関してまったく新しいので、本当に助けていただければ幸いです。

PS。可能であれば、スクリプトの手続き型コーディング スタイルを投稿してください。OOと比較したいだけです。

4

3 に答える 3

4

そのためにオブジェクト指向は必要ありません。

$array = array("usa" => array(
               "label"=>"USA", 
                "data" => array(
                                array("1988","483994"),
                                array("1989","457645") //etc
                          )
                )
          );
 echo json_encode($array);

同じことが、次のような json 文字列でも機能します。

$string = '{
  "usa": {
    label: "USA",
    data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
  }

  // skipped other data
}';

print_r(json_decode($string, true)); //Will show you the previous array

PHPドキュメントを参照してください。

于 2013-03-08T10:06:36.460 に答える
3

オブジェクト指向は必要ないと言う人もいますが、可能な限りオブジェクト指向にしたいのは明らかです。これは素晴らしいアイデアだと思います。オブジェクト指向は、ほとんどの PHP プログラムを構成する手続き的ながらくたよりもはるかに優れています。

これを試して。

<?php

class DataSet {
    var $label;
    var $data;

    public function __construct($label, $data) {
        $this->label = $label;
        $this->data = $data;
    }
}

class CountryData {
    var $datasets;

    public function __construct() {
        $this->datasets = array();
    }

    public function add($label, DataSet $dataset)
    {
        $this->datasets[$label] = $dataset;
    }
}

$usa = new DataSet('USA', array(
    array(1988, 483994),
    array(1989, 479060)
));

$sweden = new DataSet('Sweden', array(
    array(1981, 1000),
    array(1982, 2000)
));

$result = new CountryData();
$result->add('usa', $usa);
$result->add('sweden', $sweden);

echo json_encode($result);

このアプローチを使用すると、ロギングやその他の機能を add メソッドなどにアタッチできます。オブジェクト指向のアプローチにより、業界標準のパターンをより簡単に使用できる可能性が追加されます。

これは、上記のコードが出力するものです

{
    "datasets":{
        "usa":{
            "label":"USA",
            "data":[[1988,483994],[1989,479060]]
        },
        "sweden":{
            "label":"Sweden",
            "data":[[1981,1000],[1982,2000]]
        }
    }
}
于 2013-03-08T10:20:20.967 に答える
0

配列は JSON では数値のみであるため、連想配列はオブジェクトと同じようにエンコードされます。json_encode通常どおり呼び出すだけです。

json_encode($array)

オブジェクトではなく連想配列が必要な場合は、PHP で JSON をデコードするときに、2 番目のパラメーターとして true を渡します。

json_decode($json,true);

オブジェクトが必要な場合はfalse、2 番目のパラメーターとして渡すか、またはのパラメーターfalseの既定値として使用しないでください。associativejson_decode

于 2013-03-08T10:10:23.900 に答える