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