Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加额外引号的PHP数组json_编码_Php_Arrays_Json - Fatal编程技术网

添加额外引号的PHP数组json_编码

添加额外引号的PHP数组json_编码,php,arrays,json,Php,Arrays,Json,我有以下php数组,并希望将其打印为一个干净的JSON文件,但在括号和逗号周围有额外的引号。虽然我得到的当前JSON是有效的JSON,但它不是我想要的格式。请参阅下面的PHP数组、我的json_编码输出和首选json输出: Array ( [0] => { [1] => code : "EU27", [2] => debtA : 967576248244, [3] =>

我有以下php数组,并希望将其打印为一个干净的JSON文件,但在括号和逗号周围有额外的引号。虽然我得到的当前JSON是有效的JSON,但它不是我想要的格式。请参阅下面的PHP数组、我的json_编码输出和首选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_编码输出:

   [
" {",
" 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数组的理解。非常感谢您的帮助。

首先,您正在制作一系列不正确的语法:

[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 );

首先,你们正在制作一个语法不正确的数组:

[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 );

你可以很容易地做到这一点

首先以关联形式使用数组,如下所示:

 $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}]

希望这有帮助。

您可以轻松实现这一点

首先以关联形式使用数组,如下所示:

 $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}]

希望这有帮助。

您得到的JSON字符串是100%有效的,并且与您构建的输入数组完全对应。
JSON_encode()
永远不会尝试让您认为理所当然的猜测游戏:如果您有一个包含
{
的字符串,PHP将生成一个包含
的字符串{< /代码> -它甚至不考虑启动对象的可能性!

显然,您需要以这种方式构建阵列:

$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);
此外,键名称必须加引号-因为它们是字符串:

字符串是由零个或多个Unicode字符组成的序列,用 双引号,使用反斜杠转义。字符表示为 单个字符串。字符串非常像C或Java 绳子


您得到的JSON字符串是100%有效的,并且与您构建的输入数组完全对应。
JSON_encode()
永远不会尝试让您认为理所当然的猜测游戏:如果您有一个包含
{
的字符串,PHP将生成一个包含
的字符串{< /代码> -它甚至不考虑启动对象的可能性!

显然,您需要以这种方式构建阵列:

$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);
此外,键名称必须加引号-因为它们是字符串:

字符串是由零个或多个Unicode字符组成的序列,用 双引号,使用反斜杠转义。字符表示为 单个字符串。字符串非常像C或Java 绳子


您需要的正确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" }
                    ]
此json对应于多维数组,该数组应类似于: `


要更好地理解,请参见此处“

您需要的正确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" }
                    ]
此json对应于多维数组,该数组应类似于: `


为了更好地理解,请参见此处“

为什么您希望属性不带引号?这是无效的jsonDid您创建该数组?您应该使用二维数组来实现此目的。只需对数组值进行内爆。如果额外引号困扰您的原因是因为您需要通过HTTP传输数据,那么我发现我的preferred HTTP库Guzzle不需要您对数据进行JSON编码。只需给它一个数组,它就会在发出请求之前将其转换为正确的JSON。--通过Freenode irc上的#php获得提示。为什么您希望属性不带引号?这不是有效的jsonDid您创建该数组吗?您应该为他的目的。只是内爆你的数组值。如果额外的引号困扰你的原因是因为你需要通过HTTP传输数据,那么我发现我首选的HTTP库Guzzle不需要你对数据进行JSON编码。只要给它一个数组,它就会在发出请求之前在电线上将其转换为正确的JSON。--获得tip在Freenode irc.JSON上通过#php将引用字符串键ex:code将是“code”。但这不会对实现和分配产生影响。JSON将引用字符串键ex:code将是“code”。但不会对实现和分配产生影响。