1

次のphp配列があり、それをきれいなJSONファイルとして出力したいのですが、括弧とコンマの周りに余分な引用符が付けられています. 私が取得した現在のJSONは有効なJSONですが、フォーマットしたい方法ではありません。以下の PHP 配列、私の json_encode 出力、および推奨される json 出力を参照してください。

    Array
 (
[0] =>             {
[1] =>                 code : "EU27",
[2] =>                 debtA : 967576248244,
[3] =>                 debtB : 6971817122583,
[4] =>                 id : "eur",
[5] =>                 name : "EU",
[6] =>                 popY : 8584663069945,
[7] =>                 popZ : 7565913300548            }
[8] =>             ,
[9] =>             {
[10] =>                 code : "US",
[11] =>                 debtA : 9090198981283,
[12] =>                 debtB : 92189801202,
[13] =>                 id : "usa",
[14] =>                 name : "United States",
[15] =>                 popY : 4514703786570,
[16] =>                 popZ : 774697283542            }
    )

現在の json_encode 出力:

   [
" {",
" code : \"EU27\",",
" debtA : 1739414366187,",
" debtB : 8719158563660,",
" id : \"eur\",",
" name : \"EU\",",
" popY : 460572909944,",
" popZ : 2396933253407 }",
" ,",
" {",
" code : \"US\",",
" debtA : 7810766144794,",
" debtB : 10536751929567,",
" id : \"usa\",",
" name : \"United States\",",
" popY : 8571487476842,",
" popZ : 1716024078740 }"
    ]

優先 JSON 出力:

   [
 {
  code : "EU27",
  debtA : 1739414366187,
  debtB : 8719158563660,
  id : "eur",
  name : "EU",
  popY : 460572909944,
  popZ : 2396933253407 },
{
  code : "US",
  debtA : 7810766144794,
  debtB : 10536751929567,
  id : "usa",
  name : "United States",
  popY : 8571487476842,
  popZ : 1716024078740 }
   ]

私はstackoverflowを検索していて、同様の問題を見つけましたが、うまくいきません。おそらく、php と php 配列を理解しているためです。どんな助けでも大歓迎です。

4

4 に答える 4

1

まず、不適切な構文の配列を作成しています:

[0] => {

次に、探している結果はオブジェクトの配列です。これは言った。次のようなことをしたいと思うでしょう:

$array = array();

$array[0] = new StdObject;
$array[0] -> code = "EU27";
// other values added to object

$array[1] = new StdObject;
$array[1] -> code = "US";
// other values added to second object

$json = json_encode( $array );

または、オブジェクトの代わりに配列を使用することもできます。

$array = array();

$array[0] = array(
"code" => "EU27",
// other values
);

$array[1] = array(
"code" => "US",
// other values
);

$json = json_encode( $array );
于 2013-03-14T08:25:25.207 に答える
0

これは簡単に実現できます。

最初に関連付けられた形式で配列を使用する方法は次のとおりです。

 $a = [ 
 [
 'code'=>'EU27',
 'debtA' => 967576248244, .... etc
 ], 
 [
 'code'=>'Something',
 'debtA' => 874376347, .... etc
 ]
 ];

次に、内部配列をオブジェクトにキャストします

 foreach($a as $k = $v)$a[$k] = (object)$v;

それからjsonでエンコードします... 悲劇の終わり。
ここで私がサンプルとして試したもの:

 $a = [ 
 [
 'code'=>'EU27',
 'debtA' => 967576248244//, .... etc
 ], 
 [
 'code'=>'Something',
 'debtA' => 874376347//, .... etc
 ]
 ];

 foreach($a as $k => $v)$a[$k]=(object)$a[$k];
 echo json_encode($a);

そして、それは私が得たものです:

 [{"code":"EU27","debtA":967576248244},{"code":"Something","debtA":874376347}]

お役に立てれば。

于 2013-03-14T08:27:28.967 に答える
0

取得した JSON 文字列は 100% 有効で、作成した入力配列に正確に対応しています。PHP はjson_encode()、次の文字列を含む文字列がある場合、次の文字列を含む文字列を生成します — オブジェクトを開始する可能性さえ考慮しません!{{

明らかに、この方法で配列を構築する必要があります。

$input = array(
    array(
        'code' => 'EU27',
        'debtA' => '1739414366187',
        'debtB' => '8719158563660',
        'id' => 'eur',
        'name' => 'EU',
        'popY' => '460572909944',
        'popZ' => '2396933253407',
    ),
    array(
        'code' => 'US',
        'debtA' => '7810766144794',
        'debtB' => '10536751929567',
        'id' => 'usa',
        'name' => 'United States',
        'popY' => '8571487476842',
        'popZ' => '1716024078740',
    ),
);

$output = json_encode($input);

さらに、キー名は引用符で囲む必要があります。<a href="http://json.org/" rel="nofollow">これは文字列であるため、オプションではありません。

文字列は、バックスラッシュ エスケープを使用して二重引用符で囲まれた 0 個以上の Unicode 文字のシーケンスです。文字は、1 つの文字列として表されます。文字列は、C または Java の文字列に非常によく似ています。

于 2013-03-14T08:31:26.440 に答える