0

私がそのようなJSONを持っているとしましょう:

{
 id: 1,
 somevalue: "text"
}

PHP関数json_encodeでこのJSONを作成したいと思います。この JSON を次の形式で簡単に取得できます。

{
 "id": "1",
 "somevalue": "text"
}

または、JSON_NUMERIC_CHECK「id」が数値になる形式で を使用しますが、「somevalue」はその内容に応じて数値またはテキストのいずれかになります。

「somevalue」が常にテキスト形式(引用符付き)であるJSONを作成するにはどうすればよいですか。重要な場合は、他の言語で解析します。

4

3 に答える 3

4

非文字列 (int や boolean など) にしたい値がソース配列にそのまま入力されていることを確認します。

<?php
$a = array('id' => 1, 'really' => true, 'somevalue' => 'text');
var_dump( json_decode( json_encode( $a ) ) );

期待される:

object(stdClass)#1 (2) {
  ["id"]=>
  int(1)
  ["really"]=>
  bool(true)
  ["somevalue"]=>
  string(4) "text"
}

編集

常に文字列にしたい場合は、最初に文字列を配列に入れます。

<?php
$a = array('id' => '1', 'really' => 'true', 'somevalue' => 'text');
var_dump( json_decode( json_encode( $a ) ) );

与えるだろう

object(stdClass)#1 (3) {
  ["id"]=>
  string(1) "1"
  ["really"]=>
  string(4) "true"
  ["somevalue"]=>
  string(4) "text"
}

しかし、それは異なる変数型を持つという目的全体を殺します。

jsonエンコーディングの前に配列を変換できます:

<?php
$a = array('id' => 1, 'really' => true, 'somevalue' => 'text');

$tmp = array();
foreach( $a as $key=>$val ) {
   $tmp[$key] = (string)$val;
}

var_dump( json_decode( json_encode( $tmp ) ) );

最終的には次のようになります。

object(stdClass)#1 (3) {
  ["id"]=>
  string(1) "1"
  ["really"]=>
  string(1) "1"
  ["somevalue"]=>
  string(4) "text"
}
于 2012-11-20T21:14:42.120 に答える
2

somevalue常に「テキスト」形式にするには:

$somevalue1 = 1;
$somevalue2 = "text";

$json1 = array("id" => 1, "somevalue" => (string) $somevalue1);
$json2 = array("id" => 1, "somevalue" => (string) $somevalue2);

echo json_encode($json1); // outputs {"id":1,"somevalue":"1"}
echo json_encode($json2); // outputs {"id":1,"somevalue":"text"}
于 2012-11-20T21:24:16.843 に答える
0

PHP> 5.3.3. では、json_decode($array, JSON_NUMERIC_CHECK); を使用できます。

PHP 5.3.3 以降をお持ちでない場合は、次の再帰関数を作成しました。

function json_encode_with_numbers($array) {
    if(is_array($array)) {
        if(count($array)>0 && array_keys($array) !== range(0, count($array) - 1)) {
            echo '{'; 

            $isFirst = true;
            foreach($array as $key=>$item) {
                if(!$isFirst) {
                    echo ",";
                }
                echo '"'.$key.'":';
                json_encode_with_numbers($item);
                $isFirst = false;
            }
            echo '}';
        } else {
            echo '['; 
            $isFirst = true;
            foreach($array as $item) {
                if(!$isFirst) {
                    echo ",";
                }
                json_encode_with_numbers($item);
                $isFirst = false;
            }
            echo ']';
        }
    } else {
        if(is_numeric($array)) {
            echo $array;
        } elseif ($array == null) {
            echo "null";
        } else {
            echo '"'.str_replace(array('"', '\\'), array('\"', '\\\\'), $array).'"'; // escape special chars
        }

    }

}
于 2013-03-08T15:33:02.850 に答える