这是我第一次提出问题 - 我通常会找到答案..
我可以使用JMS Serializer将Doctrine实体转换为JSON和从JSON转换。我唯一的问题是,当我从JSON反序列化回实体时,JSON中的任何错误布尔值:"boolean_value":false
将在Doctrine Entity中设置为true
。
我已将其缩小到JMS Serializer。此代码中的数据已更改。
public function toEntity($entity_name, $input, $inputFormat = 'json') {
// $input is a json string where "boolean_value":false
$serializer = SerializerBuilder::create()->build();
$entity = $serializer->deserialize($json, $entity_name, $inputFormat);
// the output entity's $boolean_value is now true
// $entity->getBooleanValue() === true
return $entity;
}
如果您还有其他需要,请告诉我。
答案 0 :(得分:0)
事实证明,json_decode没有将'true'或'false'的字符串值转换为true
或false
,因此代码检查字符串值是否为true | false。
我更新了我的toEntity方法来解决这个问题。
public function toEntity($entity_name, array $input, $inputFormat = 'json') {
foreach ($input as $k => $v) {
if ($v == 'true' || $v == 'false') {
$input[$k] = filter_var($v, FILTER_VALIDATE_BOOLEAN);
}
}
$input = json_encode($input);
$serializer = SerializerBuilder::create()->build();
$entity = $serializer->deserialize($input, $entity_name, $inputFormat);
return $entity;
}