web-dev-qa-db-ja.com

解析REST Jsonリプレイ

_REST export_表示でビューを作成し、結果はJsonでシリアル化されます。

私のformBuildメソッドでは、JSONを解析して配列に変換し、選択オプションで使用したい

_    $Host = \Drupal::request()->getHost();
    $response = \Drupal::httpClient()
        ->get($Host.'/get/slider' );

    $json_string = $response->getBody()->getContents();
    kint($json_string);
_

私は Symfony serialize class を見て、この例でDeserializeメソッドを見つけます

_ $person = $serializer->deserialize($data, 'Acme\Person', 'xml');
_

これによると、たぶん私は何かのようにすべきだと思います

_     $results = $serializer->deserialize($json_string, '???', 'josn');
_

しかし、私は2番目のparam(???)で何を書くべきですか?やってみる

_    $serialize = new Serializer\Serializer();
    $json_string = $response->getBody()->getContents();
  $entity = $serialize->deserialize($json_string, '\Drupal\node\Entity\Node::class', 'json')  ;
_

しかし、エラーSymfony\Component\Serializer\Exception\UnexpectedValueException: Deserialization for the format json is not supported in Symfony\Component\Serializer\Serializer->deserialize()で私に直面します。

そして、より良い解決策がある場合は教えてくださいビューを非シリアル化するにはどうすればよいですかREST結果?

updateまた、私は試しました

_    $json_string = $response->getBody()->getContents();
    $serializer = \Drupal::service('serializer');
    $deserialized = $serializer->deserialize($json_string, \Drupal\node\Entity\Node::class, 'json');
_

しかしSymfony\Component\Serializer\Exception\UnexpectedValueException: A string must be provided as a bundle value. in Drupal\serialization\Normalizer\EntityNormalizer->denormalize()

2
Yusef

Drupalにはシリアル化のためのサービスがあり、必要なノーマライザとエンコーダで事前設定されています。現在発生しているエラーは、Symfony\Component\Serializer\Encoder\JsonEncoderを使用してシリアライザのインス​​タンスを設定していないためですが、たとえば、Drupal\serialization\Normalizer\ConfigEntityNormalizerノーマライザも必要です。

このコードは私にとってうまくいきます:

$serializer = \Drupal::service('serializer');
$node = \Drupal::entityTypeManager()->getStorage('node')->load(1);

$output = $serializer->serialize($node, 'json');
$deserialized_node = $serializer->deserialize($output, \Drupal\node\Entity\Node::class, 'json');

いつものように、可能であればサービスを注入します。

3
Clive

最初にjson_decodeをお試しくださいuse Drupal\Core\Serializer;

あなたのコードで

 $json_string = $response->getBody()->getContents();  
 $res =json_decode($json_string);
1
David Mcsmith