0

mySQL に保存されているデータの JSON 表現を作成しようとしています。

RESTful API を文書化しようとしています。

PHP の json_encode() 関数を使用しています。

次のようなデータを含むテーブルがあります

1) 名前 2) 親 3) data_type (JSON データ型に一致するオブジェクト/配列/文字列/数値) 4) 値

mySQL データベースにデータを追加するだけで、これらの JSON 文字列を作成できる一般化された関数を作成しようとしています。

ただし、オブジェクトと配列の両方の操作に問題があります。

たとえば、JSON は次のようになります。

{
"sessionToken":"","roleName":""
,"data":[
                {
                    "methodTypes":[""] , "objects":[""]
                }
            ]
}

ただし、次のように出てきます。

{
    "sessionToken":"","roleName":""
    ,"data":[
                {
                "methodTypes":[""]
            }
            ,{
                "objects":[""]
                }
            ]
}

これは、何らかの理由で私のコードが methodType とオブジェクトの両方のオブジェクトを追加していることを示しています。これは、単一のオブジェクト内にある必要があるためです。

メソッドタイプとオブジェクトを含む配列を最初に作成しようとしています。次に、$objects->$A の形式でオブジェクトを作成し、これを最初のステップで作成した配列と等しくします。次に、JSON 生成用のプライマリ データ配列に追加します。

同じJSONで配列とオブジェクトの両方が必要な場合のJSONの使用例を示す例を探していましたが、成功しませんでした。

正しい方向へのポインタは大歓迎です。

更新#1:

json_encode() に供給される配列の var_dump は次のとおりです。

array(3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=>     array(2) { [0]=> array(1) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } } [1]=>     array(1) { ["objects"]=> array(1) { [0]=> string(0) "" } } } }

ここで、既知の適切な JSON を取得して json_decode() を実行すると、var_dump は次のようになります。

object(stdClass)#3 (3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=> array(1) { [0]=> object(stdClass)#4 (2) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } ["objects"]=> array(1) { [0]=> string(0) "" } } } }

また

array(3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=> array(1) { [0]=> array(2) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } ["objects"]=> array(1) { [0]=> string(0) "" } } } }

オブジェクトの代わりに配列を返すようにTRUEに設定した場合。

4

1 に答える 1

1

目的の出力が得られるように編集

$data = ['sessionToken' => '',
    'roleName' => '',
    'data' => [['methodTypes' => [''], 'objects' => ['']]]
];

そして、それは得られます。連想配列を非連想配列でラップしたため、これは機能します

{"sessionToken":"","roleName":"","data":[{"methodTypes":[""],"objects":[""]}]}

編集

json_encode Javascript 配列に関する詳細情報には、数値キーのみが含まれています。限目。連想配列のように見えるものがある場合、それは実際には JS オブジェクトです (括弧を使用して参照できます。つまりvar['name']、 とvar.nameは同等です)。

json_encodeJSON では連想配列を作成できないため、代わりに連想 PHP 配列をオブジェクトに変換します。上記の例でわかるように、キーを指定していない場合を除いて、配列ではなくオブジェクトが返されます。

echo json_encode(['name' => 'value']);

収量

{"name":"value"}

その間

echo json_encode(['value']);

収量

["value"]
于 2013-10-27T20:11:21.570 に答える