Php 从包含数组值的字符串转换JSON

Php 从包含数组值的字符串转换JSON,php,Php,作为以下字符串,使用json_decode将其转换为数组。但是,转换后,TbManager:useraccess[]的值仍然是一个字符串 TbManager:useraccess[]可以通过再次调用json_decode将其转换为数组,json_decode($json['TbManager:useraccess[]]),但是如何在第一次json_decode调用中转换它呢 $json = '{ "TbUser:username":"admin", "TbManager:userAccesses

作为以下字符串,使用json_decode将其转换为数组。但是,转换后,
TbManager:useraccess[]
的值仍然是一个字符串

TbManager:useraccess[]
可以通过再次调用json_decode将其转换为数组,
json_decode($json['TbManager:useraccess[]]
),但是如何在第一次json_decode调用中转换它呢

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses[]":"[\"1\",\"8\"]"
}'

// converted to JSON with 'TbManager:userAccesses[]':string
// how to conver TbManager:userAccesses[] as array type
$json = json_decode($json)
在那里,这是一个单独的值,
“[\“1\”,\“8\”]”
根据JSON语法,它不是一个数组,因此您可以看到输出

当值为

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses":[1,8]
}';
在那里,这是一个单独的值,
“[\“1\”,\“8\”]”
根据JSON语法,它不是一个数组,因此您可以看到输出

当值为

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses":[1,8]
}';

这是因为JSON数据的格式不好。JSON数据的正确格式:

{"TbUser:username":"admin","TbManager:userAccesses[]":[1,8]}
在您的代码中,它将是:

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses[]":[1,8]
}';
然后:

var_dump($json);
将输出:

object(stdClass)#1 (2) {
  ["TbUser:username"] => string(5) "admin"
  ["TbManager:userAccesses[]"] => array(2) {
    [0] => int(1)
    [1] => int(8)
  }
}

这是因为JSON数据的格式不好。JSON数据的正确格式:

{"TbUser:username":"admin","TbManager:userAccesses[]":[1,8]}
在您的代码中,它将是:

$json = '{
"TbUser:username":"admin",
"TbManager:userAccesses[]":[1,8]
}';
然后:

var_dump($json);
将输出:

object(stdClass)#1 (2) {
  ["TbUser:username"] => string(5) "admin"
  ["TbManager:userAccesses[]"] => array(2) {
    [0] => int(1)
    [1] => int(8)
  }
}

您的$json应该如下所示

{"TbUser:username":"admin","TbManager:userAccesses[]":[1,8]}"

在本例中,“TbManager:useraccess[]”将是json_解码后的数组

{"TbUser:username":"admin","TbManager:userAccesses[]":[1,8]}"

在本例中,“TbManager:useraccesss[]”将在json_解码后成为数组

,如上所述,它不是一个有效的json字符串,但如果这是您得到的,下面是一个将这些值转换为数组的代码段:

$json = '{
    "TbUser:username":"admin",
    "TbManager:userAccesses[]":"[\"1\",\"8\"]"
}';

$json = json_decode($json);

array_walk_recursive($json, function (&$item, $key)
{
    if (substr($key, -2) == '[]') {
        $item = json_decode($item);  
    }
});

print_r($json);

如上所述,它不是一个有效的json字符串,但如果您得到的是这个字符串,那么下面是一个将这些值转换为数组的代码段:

$json = '{
    "TbUser:username":"admin",
    "TbManager:userAccesses[]":"[\"1\",\"8\"]"
}';

$json = json_decode($json);

array_walk_recursive($json, function (&$item, $key)
{
    if (substr($key, -2) == '[]') {
        $item = json_decode($item);  
    }
});

print_r($json);

坏的或不适合目的格式?不适合目的听起来更好:/坏的或不适合目的格式?不适合目的听起来更好:/Tmanager:UserAccesss[]在json_解码后的输出是[“1”,“8”],并且,如果1,8是字符串,如何声明Tmanager:UserAccesss[]是字符串?通过使用单引号?我明白了,这是因为引用了
[]
,因为有一个引号,处理器将其用作字符串。在json_解码后,TbManager:useraccess[]的输出是[“1”,“8”],并且,如果1,8是字符串,如何声明TbManager:useraccess[]是字符串?通过使用单引号?我明白了,这是因为引用了
[]
,因为有一个引号,处理器将其用作字符串